42

これが有効な C# かどうかはわかりませんが、理解していただければ幸いです。:)

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

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

polymorphismの使用を提案する人もいるかもしれませんが、小さなメッセージ クラスの階層を使用しているため、私の場合は実際には機能しません。

4

5 に答える 5

77

VB 2010 では、.NET Framework 4 以降を対象とするプロジェクトで、次のことができるようになりました。

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

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

Dim type = msg.GetType()
If type Is GetType(ClassA)
    ...
ElseIf type Is GetType(ClassB)
    ...
...
End If
于 2009-08-19T18:48:02.477 に答える
22

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 の方がわかりやすいでしょう。

于 2009-08-19T18:59:18.303 に答える
8

これは、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
于 2010-05-15T01:32:53.540 に答える
5

私は決してしません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
于 2011-08-11T13:58:11.300 に答える
1

これ:

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
于 2009-08-19T19:00:47.207 に答える