gpt4 book ai didi

vb.net - Select Case with "Is"operator

转载 作者:行者123 更新时间:2023-12-03 23:44:29 30 4
gpt4 key购买 nike

在 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 所建议的,为什么不给每个按钮一个自己的事件处理程序呢?

但是,如果您坚持使用 Is-able Select 之类的东西,那么我自己可能不会使用以下内容:
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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com