Compartilhar via


switch (C# Reference)

O switch a declaração é uma instrução de controle que seleciona um Alternar seção para executar a partir de uma lista de candidatos.

Cada seção do switch contém um ou mais rótulos case e uma lista de uma ou mais instruções. O exemplo a seguir mostra um simples switch instrução que tem três seções de switch. Cada seção de switch tem um rótulo case, como case 1e uma lista de 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 case Especifica um valor constante. Controle é transferido para a seção de switch cujo rótulo case contém um valor constante que corresponde ao valor da Alternar expressão, caseSwitch. Se nenhum rótulo case contiver um valor correspondente, o controle é transferido para o default seção, se houver um. Se não houver nenhum default seção, nenhuma ação será executada e o controle é transferido fora do switch instrução. No exemplo anterior, as instruções da primeira seção do switch são executadas porque o rótulo case case 1 Especifica o valor 1 e o valor de caseSwitch também é 1.

A switch instrução pode incluir qualquer número de seções do switch, e cada seção pode ter rótulos caso um ou mais. No entanto, nenhum dois rótulos casos podem conter o mesmo valor constante.

Começa com a primeira instrução de execução da lista de instrução na seção selecionada e passa a lista de instruções, normalmente até que uma instrução de salto é atingida, como um break, goto case, return, ou throw. Nesse ponto, o controle é transferido fora do switch instrução ou outro rótulo case.

Ao contrário do C++, C# não permitir a execução continuar a partir de uma seção de switch para o próximo. O código a seguir gera 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 C# é que o final de cada seção de switch, incluindo a final, inacessível. Embora normalmente, essa exigência seja atendida usando uma instrução de salto, caso a seguir também é válido, porque não pode ser alcançado o final da lista de instrução.

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

O exemplo a seguir ilustra os requisitos e recursos de um switch instrução.

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

O exemplo final, a entrada de seqüência de caracteres é convertida para uma variável integer, switchExp, que é usado para a expressão do switch. Você também pode usar a variável de seqüência de caracteres, str, diretamente. Para isso, você alteraria rótulos case para especificar valores de seqüência 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;
        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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

C# Keywords

The switch Statement

if-else (C# Reference)

Conceitos

C# Programming Guide

Outros recursos

C# Reference

Histórico de alterações

Date

History

Motivo

Setembro de 2010

Adicionado "throw" para a lista de instruções de salto pode finalizar uma seção de switch.

Comentários do cliente.