Подтвердить что ты не робот

Есть ли способ сделать мой переход/случай провалиться в следующий случай на С#?

Я использую оператор switch/case для обработки некоторых обновлений для развернутого приложения. В принципе, я хочу, чтобы с помощью сверток делал обновление от текущей текущей версии до самой новой версии.

Из Visual Studio, кричащей на меня, я узнал, что С# не позволяет пропустить следующий случай (именно то, что я пытаюсь сделать). Из этого вопроса я узнал, как делать то, что я хочу делать. Однако, по-видимому, это ошибка.

У меня есть

switch (myCurrentVersion)
{
    case null:
    case "":
    case "0":
        UpdateToV1();
        goto case "1";
    case "1":
        UpdateToV2();
}

Я получаю следующую ошибку в строке case "1"::

Ошибка 1 Контроль не может провалиться с одного ярлыка случая ( "случай" 1 ":" ) на другой

Я что-то делаю неправильно? Как я могу заставить его провалиться?

4b9b3361

Ответ 1

Вам нужно добавить оператор break, даже если это последний случай:

switch (myCurrentVersion)
{
    case null:
    case "":
    case "0":
        UpdateToV1();
        goto case "1";
    case "1":
        UpdateToV2();
        break;
}

Ответ 2

Это отличный пример того, как плохо сформулированное сообщение об ошибке создает путаницу. Правило С#, которое на самом деле нарушено здесь, заключается не в том, что контроль прошел от одного раздела коммутатора к другому; это то, что конечная точка каждой секции переключения не должна достижима. Ошибка, по правам, должна была быть чем-то вроде

Конечная точка секции переключения для случая "1" не должна достижима; рассмотрим добавление 'break;'

Когда мы перейдем к семантическому анализу операторов switch для проекта Roslyn, я посмотрю, можем ли мы изменить формулировку этого немного, чтобы быть более понятным.

Подробнее об этом и связанных с ним вопросах см. мою статью по этому вопросу.

Ответ 3

У вас нет break в ветки case "1".

Ответ 4

поместите a break; после UpdateToV2();

Не могли бы вы избавиться от goto case "1", поскольку он все равно провалится?