Compartir a través de


switch (Referencia de C#)

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

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

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;
}

Comentarios

Cada etiqueta case especifica un valor constante. La instrucción switch transfiere el control a la sección switch cuya etiqueta case coincide con el valor de la expresión switch (caseSwitch en el ejemplo). Si ninguna etiqueta case contiene un valor coincidente, el control se transfiere a la sección default, si hay alguna. 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, las instrucciones en la primera sección switch se ejecutan porque case 1 coincide con el valor de caseSwitch.

Una instrucción switch puede incluir cualquier número de secciones switch y cada sección puede tener una o más etiquetas case (como se muestra en el ejemplo siguiente de etiquetas case de una cadena). Sin embargo, las etiquetas case pueden contener el mismo valor constante.

La ejecución de la lista de instrucciones en la sección switch 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 case.

A diferencia de C++, C# no permite que la ejecución continúe de una sección switch 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;
}

C# requiere que el final de las secciones switch, incluida la última, sea inalcanzable. Es decir, a diferencia de otros lenguajes, el código puede no pasar explícitamente a la siguiente sección switch. Aunque este requisito se cumple normalmente mediante el uso de una instrucción break, la siguiente etiqueta case también es válida, porque asegura que no se pueda llegar al final de la lista de instrucciones.

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

Ejemplo

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 variable de cadena, str, y las etiquetas case de la cadena controlan el flujo de ejecución.

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 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 (str)
        {
            case "1":
            case "small":
                cost += 25;
                break;
            case "2":
            case "medium":
                cost += 25;
                goto case "1";
            case "3":
            case "large":
                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, consulte 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#

switch (Instrucción) (C++)

if-else (Referencia de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#