mcj*_*erz 40 vb.net switch-statement select-case
我不确定这个有效的C#,但希望你能得到这个想法.:)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
Run Code Online (Sandbox Code Playgroud)
我如何使用VB.NET打开对象的类型Select Case
?
我知道有些人可能会建议使用多态,但我使用的是小型消息类的层次结构,所以在我的情况下真的不行.
Met*_*ght 72
使用VB 2010,对于面向.NET framework 4及更高版本的项目,您现在可以执行以下操作:
Select Case msg.GetType()
Case GetType(ClassA)
End Select
Run Code Online (Sandbox Code Playgroud)
在早期的VB版本中,它不起作用,因为你无法比较两个类型是否相等.您必须使用Is关键字检查它们是否指向相同的引用.除非您使用像Name或FullName这样的类型的属性进行比较,否则不可能在Select Case中执行此操作,如Michael所建议的那样.您可以使用If和ElseIf的组合:
Dim type = msg.GetType()
If type Is GetType(ClassA)
...
ElseIf type Is GetType(ClassB)
...
...
End If
Run Code Online (Sandbox Code Playgroud)
Dan*_*Tao 20
好吧,如果你坚持使用Select Case,你可以随时使用:
Select Case True
Case TypeOf msg Is ClassA
' do something '
Case TypeOf msg Is ClassB
' do something else '
Case Else
' and so on '
End Select
Run Code Online (Sandbox Code Playgroud)
但我想大多数人都喜欢避免这种事情.如果/ ElseIf可能会更清楚.
小智 7
这是一种在同一个子句中处理Button1和Button2单击事件的方法(我最初是作为VB6程序员开始的,因此这是VB6处理控件数组的一个很好的替代品)
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
Select Case True
Case sender Is Me.Button1
' Do Button1 stuff '
Case sender Is Me.Button2
' Do Button2 stuff '
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)
我永远不会select case true
,但你可以这样做:
Select Case msg.GetType.Name
Case GetType(ClassA).Name
...
Case GetType(ClassB).Name
...
Case Else
...
End Select
Run Code Online (Sandbox Code Playgroud)
哪个看起来比这个干净一点:
If msg.GetType Is GetType(ClassA) Then
...
ElseIf msg.GetType Is GetType(ClassB) Then
...
Else
...
End If
Run Code Online (Sandbox Code Playgroud)