switch (Справочник по C#)

Обновлен: Ноябрь 2007

Оператор switch — это управляющий оператор, обрабатывающий множественное выделение и перечисления путем передачи управления одному из операторов case в своем тексте, как показано в следующем примере:

Пример

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

Управление передается оператору case, совпадающему со значением оператора switch. Оператор switch может включать любое количество экземпляров case, но два оператора case не могут иметь одинаковое значение. Выполнение текста оператора начинается с выбранного оператора и продолжается до тех пор, пока оператор break не передаст управление за пределы текста case. Оператор перехода, такой как break, требуется после каждого блока case, включая последний блок, вне зависимости от того, какой из двух операторов — case или default — там использован. Язык C# (в отличие от оператора switch в языке C++) не поддерживает неявное "проваливание" от одной подписи оператора case к другой, однако есть одно исключение. Исключением является случай, когда оператор case не имеет кода.

Если ни одно выражение case не совпадает со значением оператора switch, управление передается операторам, следующим за необязательной подписью default. Если подписи default нет, то управление передается за пределы оператора switch.

    class SwitchTest 
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large"); 
        Console.Write("Please enter your selection: "); 
        string s = Console.ReadLine(); 
        int n = int.Parse(s);
        int cost = 0;
        switch(n)
        {
        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.
    */
  • В предыдущем примере переменная целого типа n была использована для экземпляров case оператора switch. Обратите внимание, что также можно использовать непосредственно строковую переменную s. В этом случае можно использовать следующие экземпляры case оператора switch.
switch(s)
{
    case "1":
        // ...
    case "2":
        // ...
}

В следующем примере демонстрируется, что для пустых подписей оператора case разрешено "проваливание" от одной подписи оператора case к другой.

class SwitchTest2 
{
    static void Main()
    {
        int n = 2;
        switch(n) 
        {
            case 1:
            case 2: 
            case 3: 
                Console.WriteLine("It's 1, 2, or 3.");
                break; 
        default: 
            Console.WriteLine("Not sure what it is.");
            break; 
        }
    }
}
//  Output: It's 1, 2, or 3.

Спецификация языка C#

Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:

  • 5.3.3.6 Оператор switch

  • 8.7.2 Оператор switch

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Ключевые слова C#

The switch Statement

if-else (Справочник по C#)

Другие ресурсы

Справочник по C#