作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 VB.NET 中,我必须比较 select case
中的一些对象陈述。
自 select case
用途 =
运算符默认情况下,这不是为对象定义的,会引发编译错误。
我目前使用这个解决方法:
Select Case True
Case sender Is StyleBoldButton
Case sender Is StyleUnderButton
Case sender Is StyleItalicButton
End Select
最佳答案
任何定义了必要的比较运算符(=、>=、<= 等)的东西对 Select Case
来说都是公平的游戏。 .正确(或错误),引用只是不与 =
进行比较在VB中;必须使用Is
. (或 Object.Equals(objA As Object, objB As Object)
- 但是,真的,为什么?当你有 Is
时?)
但是看看Object equality behaves different in .NET - 也许 VB 方式不那么令人困惑?不管怎样,我认为你从 Select Case
开始就被 If-ElseIf 梯子困住了不做 Is
. (嗯,确实如此,但这是一个不同的 Is
,更像是 Hypercard 的 it
。)我认为梯子看起来很聪明并且易于遵循:
If sender Is StyleBoldButton Then
ElseIf sender Is StyleUnderButton Then
ElseIf sender Is StyleItalicButton Then
Else
End If
Select Case True
模式是 VB6 中的“OrElse”短路解决方法 - 一种满足实际需求的奇怪方法。但这在 VB.NET 中是不需要的。本着这种精神,也许最好使用更符合面向对象语言所期望的最佳实践的设计模式。例如,正如 Denis Troller 所建议的,为什么不给每个按钮一个自己的事件处理程序呢?
With sender
If .Equals(StyleBoldButton) Then
ElseIf .Equals(StyleUnderButton) Then
ElseIf .Equals(StyleItalicButton) Then
Else
End If
End With
.Equals
像 C# 一样工作
==
当面对两个
object
要比较的类型(请参阅
http://visualstudiomagazine.com/articles/2011/02/01/equality-in-net.aspx )。美妙之处在于
sender
只被提及一次;然而,这一切
ElseIf .Equals( ... ) Then
您必须为每个“案例”键入。
GetHashCode()
:
Select Case sender.GetHashCode()
Case StyleBoldButton.GetHashCode()
Case StyleUnderButton.GetHashCode()
Case StyleItalicButton.GetHashCode()
Case Else
End Select
GetHashCode()
唯一地(足够)识别这些控件。 (见
Default implementation for Object.GetHashCode())。
关于vb.net - Select Case with "Is"operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308819/
我是一名优秀的程序员,十分优秀!