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:

- expresión1Toexpresión2
- [ Is ] operadorDeComparaciónexpresió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 Caseexpressionlist, 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 Caseexpressionlist 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

Consulte también