Выберите Случай по типу объекта в VB.NET
Я не уверен, что это действительный С#, но, надеюсь, вы получите эту идею.:)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
Как включить тип объекта, но используя VB.NET Select Case
?
Я знаю, что некоторые могут предложить использовать polymorphism, но я использую иерархию небольших классов сообщений, чтобы действительно Я работаю в моем случае.
Ответы
Ответ 1
С VB 2010 для проектов, ориентированных на .NET framework 4 и более поздних версий, вы можете сделать следующее:
Select Case msg.GetType()
Case GetType(ClassA)
End Select
В более ранних версиях VB это не сработало, потому что вы не могли сравнивать два типа с равенством. Вам нужно будет проверить, указывают ли они на ту же ссылку, используя ключевое слово Is. Это невозможно сделать в случае выбора, если вы не используете свойство типа типа Name или FullName для сравнения, как было предложено Майклом. Вы можете использовать комбинацию If и ElseIf, хотя:
Dim type = msg.GetType()
If type Is GetType(ClassA)
...
ElseIf type Is GetType(ClassB)
...
...
End If
Ответ 2
Ну, если вы настаиваете на использовании 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
Но я бы подумал, что большинству людей нравится избегать такого рода вещей. Если /ElseIf, вероятно, будет более ясным.
Ответ 3
Это способ обработки событий 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
Ответ 4
Я бы никогда не 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
Ответ 5
Это:
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