switch (C# Reference)

A declaração de switch é uma declaração de controle que seleciona uma seção da opção para executar a partir de uma lista de candidatos.

Cada seção de troca contém uma ou mais dos casos rótulos e uma lista de uma ou mais declarações.O exemplo a seguir mostra uma declaração simples de switch que tem três seções de opção.Cada seção de opção tem um rótulo dos casos, como case 1, e uma lista das duas instruções.

Exemplo

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 rótulo dos casos especifica um valor constante.O controle é transferido da seção de troca cuja rótulo dos casos contém um valor constante que corresponde ao valor de uma expressão de opção, caseSwitch.Se nenhum rótulo dos casos contém um valor correspondente, o controle será transferido da seção de default , se houver.Se não houver nenhuma seção de default , nenhuma ação é efetuado e o controle é transferido para fora da declaração de switch .No exemplo anterior, as instruções na primeira seção de opção são executadas como o rótulo case 1 dos casos especifica o valor 1, e o valor de caseSwitch também é 1.

Uma declaração de switch pode incluir qualquer número de seções de opção, e cada seção pode ter um ou mais rótulos dos casos.No entanto, nenhum rótulo de dois casos pode conter o mesmo valor constante.

A execução da lista de instruções na seção selecionada começa com a primeira instrução e continua através da lista de instruções, normalmente até que uma instrução do salto é alcançada, como break, goto case, return, ou throw.Nesse ponto, o controle é transferido para fora da declaração de switch ou a outro rótulo dos casos.

Diferentemente de C++, C# não permite que a execução continue de uma seção de opção ao seguinte.O código a seguir causa um erro.

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

O requisito em C# é que ao final de cada seção de opção, incluindo final, é inacessível.Embora esse requisito é atingido geralmente usando uma instrução de ignorar relatórios, os seguintes casos também são válidos, porque o fim da lista de declaração não pode ser alcançado.

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

O exemplo a seguir ilustra os requisitos e recursos de uma instrução de 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;
        }
    }
}

No exemplo, a entrada final da cadeia de caracteres é convertido em uma variável integer, switchExp, que é usado para a expressão de opção.Você também pode usar a variável de cadeia de caracteres, str, diretamente.Para fazer isso, você alteraria rótulos dos casos para especificar valores de cadeia de caracteres, como é mostrado no código a seguir.

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.
*/

Especificação da linguagem C#

Para obter mais informações, consulte Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.

Consulte também

Referência

Palavras-chave C#

Alternar instrução (C++)

if-else (C# Reference)

Conceitos

Guia de programação do C#

Outros recursos

Referência de C#