switch - Seleccione Case en el tipo de un objeto en VB.NET
switch en visual net (5)
No estoy seguro de si este C # válido, pero espero que entiendas la idea. :)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
¿Cómo podría activar el tipo de un objeto pero utilizando Select Case
VB.NET?
Soy consciente de que algunos pueden sugerir el uso de polymorphism , pero estoy usando una jerarquía de clases de mensajes pequeños para que realmente no funcione en mi caso.
Bueno, si insiste en usar Select Case, siempre puede ir con:
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
Pero me imagino que a la mayoría de la gente le gusta evitar este tipo de cosas. Si / ElseIf probablemente sería más claro.
Con VB 2010, para proyectos dirigidos a .NET framework 4 y posteriores, ahora puede hacer esto:
Select Case msg.GetType()
Case GetType(ClassA)
End Select
En versiones anteriores de VB, no funcionaba porque no se podían comparar dos tipos con igualdad. Debería verificar si apuntan a la misma referencia usando la palabra clave Is. No es posible hacer esto en un Caso Selecto, a menos que use una propiedad del tipo como el Nombre o Nombre Completo para la comparación, como lo sugiere Michael. Puede usar una combinación de If y ElseIf aunque:
Dim type = msg.GetType()
If type Is GetType(ClassA)
...
ElseIf type Is GetType(ClassB)
...
...
End If
Esta es una forma de manejar los eventos de clic Button1 y Button2 en el mismo sub (comencé como un programador VB6, así que este es un buen sustituto para el manejo de VB6 de las matrices de control)
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
Esta:
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
Nunca select case true
, pero puedes hacer esto:
Select Case msg.GetType.Name
Case GetType(ClassA).Name
...
Case GetType(ClassB).Name
...
Case Else
...
End Select
Que es un poco más limpio que esto:
If msg.GetType Is GetType(ClassA) Then
...
ElseIf msg.GetType Is GetType(ClassB) Then
...
Else
...
End If