VB.NETでオブジェクトの型のケースを選択
-
19-09-2019 - |
質問
この有効な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
所属していません StackOverflow