web-dev-qa-db-ja.com

VB.NETのオブジェクトのタイプでケースを選択

この有効なC#かどうかはわかりませんが、うまくいけばアイデアが得られます。 :)

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

VB.NETのSelect Caseを使用してオブジェクトのタイプを切り替えるにはどうすればよいですか?

polymorphism を使用することを推奨する人もいることは承知していますが、小さなメッセージクラスの階層を使用しているので、私の場合は実際には機能しません。

40
mcjabberz

VB 2010では、.NET Framework 4以降を対象とするプロジェクトの場合、これを行うことができます。

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

以前のVBバージョンでは、2つの型を同等に比較できなかったため機能しませんでした。Isキーワードを使用して同じ参照を指しているかどうかを確認する必要があります。 Michaelが提案したように、NameやFullNameなどのタイプのプロパティを比較に使用しない限り、Select Caseでこれを行うことができますが、IfとElseIfの組み合わせを使用できます。

Dim type = msg.GetType()
If type Is GetType(ClassA)
    ...
ElseIf type Is GetType(ClassB)
    ...
...
End If
72
Meta-Knight

ええと、もしあなたが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

しかし、私はほとんどの人がこの種のことを避けたいと思うと思います。 If/ElseIfはおそらくより明確です。

20
Dan Tao

これは、同じサブで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
7
Dan

私は今まで_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
4
Mr Shoubs

この:

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
1
Fredou