質問

この有効なC#の場合、私はわからないんだけど、うまくいけばあなたのアイデアを得ます。 :)

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

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

私はいくつかは多型を使用することをお勧めかもしれないことを認識してんだけど、私は使用しています小さなメッセージクラスの階層は本当に私の場合には動作しないように。

役に立ちましたか?

解決

VB 2010では、後で.NETフレームワーク4をターゲットプロジェクトやのために、あなたは今、これを行うことができます

Select Case msg.GetType()
    Case GetType(ClassA)
End Select
あなたは平等で2種類を比較することができなかったため、

以前のVBのバージョンでは、それは動作しませんでした。あなたは、彼らがされたキーワードを使用して、同一の参照を指しているかどうかを確認する必要があると思います。あなたが比較のために名前またはフルネームのようなタイプのプロパティを使用しない限り、それはマイケルにより示唆されるように、選択した場合にこれを実行することはできません。あなたはしかし、もしとのElseIfの組み合わせを使用することができます:

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

他のヒント

あなたが選択ケースを使う、という場合は、

さて、あなたはいつも一緒に行くことができます:

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は、おそらく明確になります。

これは同じサブで、ボタン1とボタンクリックイベントを処理する方法である(私は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

slighlyクリーナーこれ以上見ているます:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top