switch (Referencia de C#)

La instrucción switch es una instrucción de control que selecciona una sección del modificador para ejecutar desde una lista de candidatos.

Cada sección del modificador contiene una o más etiquetas case y una lista de una o más instrucciones.En el ejemplo siguiente se muestra una instrucción switch simple con tres secciones del modificador.Cada sección del modificador tiene una etiqueta case, como case 1, y una lista de dos instrucciones.

Ejemplo

int caseSwitch = 1;
switch (caseSwitch)
{
    case 1:
        Console.WriteLine("Case 1");
        break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

Cada etiqueta case especifica un valor constante.El control se transfiere a la sección del modificador, cuya etiqueta case contiene un valor constante que coincide con el valor de la expresión switch, caseSwitch.Si ninguna etiqueta de caso contiene un valor coincidente, el control se transfiere a la sección default, si la hay.Si no hay ninguna sección default, no se realiza ninguna acción y el control se transfiere fuera de la instrucción switch.En el ejemplo anterior, se ejecutan las instrucciones de la primera sección del modificador porque la etiqueta case case 1 especifica el valor 1 y el valor de caseSwitch también es 1.

Una instrucción switch puede incluir un número cualquiera de secciones del modificador y cada sección puede tener una o más etiquetas case.Sin embargo, las etiquetas de dos casos pueden contener el mismo valor constante.

La ejecución de la lista de instrucciones en la sección seleccionada comienza con la primera instrucción y continúa a lo largo de la lista de instrucciones, normalmente hasta que se alcance una instrucción de salto, como break, goto case, return o throw.En este punto, el control se transfiere fuera de la instrucción switch o a otra etiqueta de caso.

A diferencia de C++, C# no permite que la ejecución continúe de una sección del modificador a la siguiente.El código siguiente genera un error.

switch (caseSwitch)
{
    // The following switch section causes an error.
    case 1:
        Console.WriteLine("Case 1...");
        // Add a break or other jump statement here.
    case 2:
        Console.WriteLine("... and/or Case 2");
        break;
}

El requisito en C# es que no se pueda alcanzar el final de cada sección del modificador, incluida la final.Aunque este requisito se cumple normalmente mediante el uso de una instrucción break, el caso siguiente también es válido, porque no se puede llegar al final de la lista de instrucciones.

case 4:
    while (true)
        Console.WriteLine("Endless looping. . . .");

En el ejemplo siguiente se muestran los requisitos y las capacidades de una instrucción switch.

class Program
{
    static void Main(string[] args)
    {
        int switchExpression = 3;
        switch (switchExpression)
        {
            // A switch section can have more than one case label.
            case 0:
            case 1:
                Console.WriteLine("Case 0 or 1");
                // Most switch sections contain a jump statement, such as
                // a break, goto, or return. The end of the statement list
                // must be unreachable.
                break;
            case 2:
                Console.WriteLine("Case 2");
                break;
                // The following line causes a warning.
                Console.WriteLine("Unreachable code");
            // 7 - 4 in the following line evaluates to 3.
            case 7 - 4:
                Console.WriteLine("Case 3");
                break;
            // If the value of switchExpression is not 0, 1, 2, or 3, the
            // default case is executed.
            default:
                Console.WriteLine("Default case (optional)");
                // You cannot "fall through" any switch section, including
                // the last one.
                break;
        }
    }
}

En el último ejemplo, la entrada de cadena se convierte en una variable de entero, switchExp, que se usa para la expresión switch.También puede utilizar la variable de cadena, str, directamente.Para ello, se han de cambiar las etiquetas case para especificar valores de cadena, como se muestra en el código siguiente.

switch(str)
{
    case "1":
        // ...
    case "2":
        // ...
}
class SwitchTest
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
        Console.Write("Please enter your selection: ");
        string str = Console.ReadLine();
        int switchExp = int.Parse(str);
        int cost = 0;

        // Notice the goto statements in cases 2 and 3. The base cost of 25
        // cents is added to the additional cost for the medium and large sizes.
        switch (switchExp)
        {
            case 1:
                cost += 25;
                break;
            case 2:
                cost += 25;
                goto case 1;
            case 3:
                cost += 50;
                goto case 1;
            default:
                Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
                break;
        }
        if (cost != 0)
        {
            Console.WriteLine("Please insert {0} cents.", cost);
        }
        Console.WriteLine("Thank you for your business.");
    }
}
/*
    Sample Input: 2

    Sample Output:
    Coffee sizes: 1=Small 2=Medium 3=Large
    Please enter your selection: 2
    Please insert 50 cents.
    Thank you for your business.
*/

Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

instrucción switch (C++)

if-else (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#