Instrucción Select...Case (Visual Basic)
Ejecuta uno de varios grupos de instrucciones en función del valor de una expresión.
Sintaxis
Select [ Case ] testexpression
[ Case expressionlist
[ statements ] ]
[ Case Else
[ elsestatements ] ]
End Select
Partes
Término | Definición |
---|---|
testexpression |
Obligatorio. Expresión. Debe evaluarse como uno de los tipos de datos elementales (Boolean , Byte , Char , Date , Double , Decimal , Integer , Long , Object , SByte , Short , Single , String , UInteger , ULong y UShort ). |
expressionlist |
Obligatorio en una instrucción Case . Lista de cláusulas de expresión que representan valores de coincidencia para testexpression . Si hay varias cláusulas de expresión, están separadas por comas. Cada cláusula puede adoptar una de las formas siguientes:- expression1 To expression2- [ Is ] operador_de_comparación expresión- expression Use la palabra clave To para especificar los límites de un intervalo de valores de coincidencia para testexpression . El valor de expression1 debe ser menor o igual que el valor de expression2 .Use la palabra clave Is con un operador de comparación (= , <> , < , <= , > o >= ) para especificar una restricción en los valores de coincidencia de testexpression . Si no se proporciona la palabra clave Is , se inserta automáticamente antes de operadorDeComparación.El formulario que especifica solo expression se trata como un caso especial del formulario Is en el que operadorDeComparación es el signo igual (= ). Este formulario se evalúa como testexpression = expression .Las expresiones de expressionlist pueden ser de cualquier tipo de datos, siempre que se puedan convertir implícitamente en el tipo de testexpression y el comparisonoperator adecuado es válido para los dos tipos con los que se está usando. |
statements |
Opcional. Una o varias instrucciones que siguen a Case que se ejecutan si testexpression coincide con alguna cláusula de expressionlist . |
elsestatements |
Opcional. Una o varias instrucciones que siguen a Case Else que se ejecutan si testexpression no coincide con ninguna cláusula en expressionlist de cualquiera de las instrucciones Case . |
End Select |
Termina la definición de la construcción Select ...Case . |
Comentarios
Si testexpression
coincide con alguna cláusula Case
expressionlist
, las instrucciones que siguen a la instrucción Case
se ejecutan hasta la siguiente instrucción Case
, Case Else
o End Select
. Posteriormente, el control pasa a la instrucción que sigue a End Select
. Si testexpression
coincide con una cláusula expressionlist
en más de una cláusula Case
, solo se ejecutan las instrucciones que siguen a la primera ejecución.
La instrucción Case Else
se usa para introducir elsestatements
para ejecutarse si no se encuentra ninguna coincidencia entre testexpression
y una cláusula expressionlist
en cualquiera de las demás instrucciones Case
. Aunque no es necesario, es recomendable tener una instrucción Case Else
en la construcción Select Case
para controlar valores testexpression
imprevistos. Si ninguna cláusula Case
expressionlist
coincide con testexpression
y no hay ninguna instrucción Case Else
, el control pasa a la instrucción que sigue a End Select
.
Puede usar varias expresiones o rangos en cada cláusula Case
. Por ejemplo, la línea siguiente es válida.
Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber
Nota
La palabra clave Is
usada en las instrucciones Case
y Case Else
no es la misma que el operador Is, que se usa para la comparación de referencia de objetos.
Puede especificar rangos y varias expresiones para cadenas de caracteres. En el ejemplo siguiente, Case
coincide con cualquier cadena que sea exactamente igual a "apples" (manzanas), tiene un valor entre "nuts" (frutos secos) y "soup" (sopa) en orden alfabético, o contiene el mismo valor que el valor actual de testItem
.
Case "apples", "nuts" To "soup", testItem
La configuración de Option Compare
puede afectar a las comparaciones de cadenas. En Option Compare Text
, las cadenas "Apples" y "apples" se comparan como iguales, pero en Option Compare Binary
, no.
Nota
Una instrucción Case
con varias cláusulas puede mostrar un comportamiento conocido como cortocircuito. Visual Basic evalúa las cláusulas de izquierda a derecha y, si se produce una coincidencia con testexpression
, no se evalúan las cláusulas restantes. El cortocircuito puede mejorar el rendimiento, pero puede producir resultados inesperados si su expectativa es que se evalúen todas las expresiones expressionlist
. Para obtener más información sobre el cortocircuito, consulte Expresiones booleanas.
Si el código dentro de un bloque de instrucciones Case
o Case Else
no necesita ejecutar más instrucciones en el bloque, puede salir del bloque mediante la instrucción Exit Select
. Esto transfiere el control inmediatamente a la instrucción que sigue a End Select
.
Las construcciones Select Case
se pueden anidar. Cada construcción Select Case
anidada debe tener una instrucción End Select
coincidente y debe estar completamente contenida dentro de un único bloque de instrucción Case
o Case Else
de la construcción Select Case
externa en la que está anidada.
Ejemplo
En el ejemplo siguiente se usa una construcción Select Case
para escribir una línea correspondiente al valor de la variable number
. La segunda instrucción Case
contiene el valor que coincide con el valor actual de number
, por lo que se ejecuta la instrucción "Between 6 and 8, inclusive" (Entre 6 y 8, inclusive).
Dim number As Integer = 8
Select Case number
Case 1 To 5
Debug.WriteLine("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Debug.WriteLine("Between 6 and 8, inclusive")
Case 9 To 10
Debug.WriteLine("Equal to 9 or 10")
Case Else
Debug.WriteLine("Not between 1 and 10, inclusive")
End Select