この有効なC#かどうかはわかりませんが、うまくいけばアイデアが得られます。 :)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
VB.NETのSelect Case
を使用してオブジェクトのタイプを切り替えるにはどうすればよいですか?
polymorphism を使用することを推奨する人もいることは承知していますが、小さなメッセージクラスの階層を使用しているので、私の場合は実際には機能しません。
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
ええと、もしあなたが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はおそらくより明確です。
これは、同じサブで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
私は今まで_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
この:
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