Frage

Ich bin mir nicht sicher, ob dies gilt C #, aber hoffentlich bekommen Sie die Idee. :)

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

Wie würde ich einschalten den Typ eines Objekts, aber unter Verwendung VB.NET des Select Case?

Ich bin mir bewusst, dass einige könnte darauf hindeuten, mit Polymorphismus , aber ich bin mit eine Hierarchie von kleinen Nachrichtenklassen, so dass wirklich wäre in meinem Fall nicht funktionieren.

War es hilfreich?

Lösung

Mit VB 2010 für Projekte, die sich .NET Framework 4 und höher, können Sie dies jetzt tun:

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

In früheren VB-Versionen, es hat nicht funktioniert, weil Sie nicht zwei Typen mit Gleichheit vergleichen könnten. Sie müßten prüfen, ob sie auf die gleiche Referenz mit dem Schlüsselwort I zeigen. Es ist nicht möglich, dies in einer Select Case zu tun, wenn Sie eine Eigenschaft des Typs wie der Name oder Fullname für den Vergleich verwenden, wie von Michael vorgeschlagen. Sie können eine Kombination von If und ElseIf verwenden aber:

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

Andere Tipps

Nun, wenn Sie sich mit Select Case bestehen, könnte man immer gehen mit:

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

Aber ich könnte mir vorstellen, die meisten Leute mögen diese Art der Sache zu vermeiden. If / ElseIf würde wahrscheinlich klarer.

Dies ist eine Möglichkeit, Button1 und Button2 Click-Ereignisse in dem gleichen Unter (I als VB6 Programmierer begann, so ist dies ein guter Ersatz für VB6 Umgang mit Steuer Arrays) zu behandeln

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

Ich würde nicht immer select case true, aber Sie können dies tun:

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

Welche ist slighly sauberer aus als dies:

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

Dieses:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top