Зачем падать с помощью случаев переключения в С#

Поскольку все мы знаем, что случаи переключения в С# не позволяют вам проваливаться через MSDN

Выполнение списка операторов в выбранном разделе коммутатора начинается с первого оператора и проходит через список операторов, как правило, до тех пор, пока не будет достигнут оператор перехода, такой как разрыв, goto case, return или throw. В этот момент управление передается за пределы оператора switch или другого ярлыка.

В отличие от C++, С# не позволяет продолжить выполнение с одного раздела коммутатора на другое. Следующий код вызывает ошибку.

Если это так, то зачем это компилируется:

void Main()
{
    int  s = 3;
    switch (s)
    {
        case 1:
        case 2:
        case 3:
            Console.WriteLine("hit 3");
            break;
    }
}

Не следует ли это идентифицировать как ошибку времени компиляции?

0
источник поделиться
1 ответ

Во-первых, код, который вы предоставили, не выдает ошибку времени выполнения. Во-вторых, он подпадает под другую категорию (из той же статьи MSDN, акцент мой):

Оператор switch может включать в себя любое количество разделов коммутатора, и каждый раздел может иметь одну или несколько ярлыков case (как показано в примере с примерами примеров строк). Однако никакие ярлыки с двумя ярлыками не могут содержать одно и то же постоянное значение.

Разница заключается в том, разрешено ли вам несколько утверждений о пустых case. Но вы не можете иметь case с кодом в нем, и пусть это провалится.

+6
источник

Посмотрите другие вопросы по меткам или Задайте вопрос