代码之家  ›  专栏  ›  技术社区  ›  mcjabberz

在vb.net中选择对象类型的大小写

  •  39
  • mcjabberz  · 技术社区  · 15 年前

    我不确定这是否有效,但希望你能理解。:)

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

    如何打开对象类型,但使用vb.net Select Case ?

    我知道有些人可能会建议使用 polymorphism 但是我使用的是一个小消息类的层次结构,这样在我的情况下就不会真正起作用。

    5 回复  |  直到 12 年前
        1
  •  71
  •   Meta-Knight    12 年前

    使用VB 2010,对于面向.NET Framework 4及更高版本的项目,现在可以执行以下操作:

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

    在早期的VB版本中,它不起作用,因为您无法用相等的方式比较两种类型。您必须使用is关键字检查它们是否指向同一引用。在Select案例中不可能这样做,除非您使用像name或fullname这样的类型的属性进行比较,如michael建议的那样。但是,您可以使用if和elseif的组合:

    Dim type = msg.GetType()
    If type Is GetType(ClassA)
        ...
    ElseIf type Is GetType(ClassB)
        ...
    ...
    End If
    
        2
  •  20
  •   Dan Tao    15 年前

    好吧,如果您坚持使用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可能会更清楚。

        3
  •  7
  •   Dan    14 年前

    这是在同一个子集中处理button1和button2 click事件的一种方法(我从一个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
    
        4
  •  4
  •   Mr Shoubs    13 年前

    我永远不会 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
    
        5
  •  1
  •   Peter Mortensen venu    12 年前

    这是:

    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