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

Почему вы не можете оставить выражение окончательно?

Когда я помещаю return внутри блока оператора finally, компилятор говорит мне:

Элемент управления не может покинуть тело предложения finally

Пример:

try
{
}
catch
{
}
finally
{
    return;
}

Почему это?

4b9b3361

Ответ 1

Посмотрите, что произойдет, если вы столкнулись с return 1 внутри блока try и return 0 внутри блока finally... Ваша функция будет пытаться вернуть два значения! Комбинированные параметры try и catch являются исчерпывающими с точки зрения потока управления.

Ответ 2

Он по дизайну и описан в спецификации С#: 8.10 Инструкция try.

Это ошибка времени компиляции для оператора break, continue или gotoуправление передачей из блока finally. Когда a break, continue или Оператор goto выполняется в блоке finally, цель оператора должен находиться в одном и том же блоке finally или, иначе, время компиляции возникает ошибка.

Это ошибка времени компиляции для оператора return для встречаются в блоке finally.

Ответ 3

Текущие ответы объясняют, почему это происходит хорошо, но я также считаю важным отметить, насколько легко обойти это ограничение в случае, когда не задействовано возвратное значение, а предложение finally - это последняя вещь в методе (что часто происходит):

try {}
catch {}
finally
{
    FinallyMethod();
}

Затем в FinallyMethod вы можете использовать операторы return столько, сколько хотите

void FinallyMethod()
{
   //...
   if (x == y)
       return;
   else
       a = b;
   //etc.
}