Je ne sais pas si ce C # valide, mais j'espère que vous avez l'idée. :)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
Comment activer le type d'un objet mais en utilisant le Select Case
De VB.NET?
Je suis conscient que certains pourraient suggérer d'utiliser polymorphisme , mais j'utilise une hiérarchie de petites classes de messages afin que cela ne fonctionne vraiment pas dans mon cas.
Avec VB 2010, pour les projets ciblant .NET Framework 4 et versions ultérieures, vous pouvez désormais le faire:
Select Case msg.GetType()
Case GetType(ClassA)
End Select
Dans les versions précédentes de VB, cela ne fonctionnait pas car vous ne pouviez pas comparer deux types avec l'égalité. Vous devez vérifier s'ils pointent vers la même référence à l'aide du mot clé Is. Ce n'est pas possible de le faire dans un cas de sélection, sauf si vous utilisez une propriété du type comme le nom ou le nom complet pour comparaison, comme suggéré par Michael. Vous pouvez cependant utiliser une combinaison de If et ElseIf:
Dim type = msg.GetType()
If type Is GetType(ClassA)
...
ElseIf type Is GetType(ClassB)
...
...
End If
Eh bien, si vous insistez pour utiliser Select Case, vous pouvez toujours choisir:
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
Mais j'imagine que la plupart des gens aiment éviter ce genre de chose. Si/ElseIf serait probablement plus clair.
C'est un moyen de gérer les événements de clic Button1 et Button2 dans le même sous-marin (j'ai commencé en tant que programmeur VB6, c'est donc un bon substitut pour la gestion VB6 des tableaux de contrôle)
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
Je ne serais jamais select case true
, mais vous pouvez le faire:
Select Case msg.GetType.Name
Case GetType(ClassA).Name
...
Case GetType(ClassB).Name
...
Case Else
...
End Select
Ce qui est légèrement plus propre que celui-ci:
If msg.GetType Is GetType(ClassA) Then
...
ElseIf msg.GetType Is GetType(ClassB) Then
...
Else
...
End If
Cette:
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