vb.net – 选择“是”操作符

前端之家收集整理的这篇文章主要介绍了vb.net – 选择“是”操作符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在VB.NET中,我必须比较select case语句中的某些对象.

由于默认情况下select case uses = operator,并且没有为对象定义,因此会抛出编译错误.

我目前使用此解决方法

Select Case True
    Case sender Is StyleBoldButton

    Case sender Is StyleUnderButton

    Case sender Is StyleItalicButton

End Select

其实是有效的.

有什么更漂亮的看到和更容易理解吗?

任何具有必要的比较运算符(=,> =,< =等)的定义是选择案例的公平游戏.正确(或错误地),引用只是不与VB中的=进行比较;必须使用Is. (或Object.Equals(objA As Object,objB As Object) - 但是,真的,为什么?当你有?) 但是看看 Object equality behaves different in .NET – 也许VB的方式不那么混乱?无论如何,我认为你因为选择案例不做而被困在If-ElseIf梯子上. (嗯,它是,但这是一个不同的是,更像是Hypercard.)我认为梯子看起来聪明,容易遵循:
If sender Is StyleBoldButton Then 

ElseIf sender Is StyleUnderButton Then

ElseIf sender Is StyleItalicButton Then

Else

End If

正如您所指出的那样,选择案例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#==当面对两个对象类型进行比较(见http://visualstudiomagazine.com/articles/2011/02/01/equality-in-net.aspx).这个优点是发件人只提到一次;然而,所有这些ElseIf .Equals(…)然后你必须为每个“案例”键入.

我不会使用自己的另一种方法是使用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相关文章