visual switch net multiple estructura ejercicios ejemplos conditions vb.net switch-statement select-case

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