在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议使用多态 ,但我使用的是一个小的消息类的层次结构,所以在我的情况下真的不起作用。

5 Solutions collect form web for “在VB.NET中select一个对象types的Case”

在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 
  • 私人小组,function和class级之间的区别
  • 在声明处添加键/值到词典
  • 我应该在VB / VBA中使用Call关键字吗?
  • 如何使String.Contains不区分大小写?
  • 在datagridview中禁用单元格高亮显示
  • 了解浮点问题
  • 在VB.NET或C#中使用itextsharp dll读取PDF内容
  • C#asynchronous - 它是如何工作的?
  • 有没有一种方法来导航到一个接口的方法的真正实现?
  • 该名称不存在于XAML中的命名空间错误中
  • 我如何创build一个参数化的SQL查询? 我为什么要?