在VB.NET中select一个对象types的Case

我不知道这个有效的C#,但希望你能明白这一点。 🙂

switch (msg.GetType()) { case ClassA: // blah case ClassB: // blah 2 case ClassC: // blah 3 } 

我如何打开一个对象的types,但使用VB.NET的Select Case

我知道有些人可能会build议使用多态 ,但我使用的是一个小的消息类的层次结构,所以在我的情况下真的不起作用。

在VB 2010中,针对.NET Framework 4及更高版本的项目,现在可以这样做:

 Select Case msg.GetType() Case GetType(ClassA) End Select 

在早期的VB版本中,它不起作用,因为你不能比较两种types的平等。 你必须检查他们是否使用Is关键字指向相同的引用。 除非您使用名称或FullNametypes的属性进行比较,否则无法在Select Case中执行此操作,正如Michael所build议的。 但是,您可以使用If和ElseIf的组合:

 Dim type = msg.GetType() If type Is GetType(ClassA) ... ElseIf type Is GetType(ClassB) ... ... End If 

那么,如果你坚持使用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 

但我想大多数人喜欢避免这种事情。 如果/ ElseIf可能会更清楚。

这是一个方法来处理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 

我不会select case true ,但你可以这样做:

 Select Case msg.GetType.Name Case GetType(ClassA).Name ... Case GetType(ClassB).Name ... Case Else ... End Select 

看起来比这更简洁:

 If msg.GetType Is GetType(ClassA) Then ... ElseIf msg.GetType Is GetType(ClassB) Then ... Else ... End If 

这个:

 Dim a As Object = New TextBox Select Case True Case TypeOf a Is TextBox MsgBox("aaa") Case TypeOf a Is ComboBox Case TypeOf a Is ListBox End Select 
Interesting Posts