Почему вы не можете оставить выражение окончательно?
Когда я помещаю return внутри блока оператора finally, компилятор говорит мне:
Элемент управления не может покинуть тело предложения finally
Пример:
try
{
}
catch
{
}
finally
{
return;
}
Почему это?
Ответ 1
Посмотрите, что произойдет, если вы столкнулись с return 1 внутри блока try и return 0 внутри блока finally... Ваша функция будет пытаться вернуть два значения! Комбинированные параметры try и catch являются исчерпывающими с точки зрения потока управления.
Это ошибка времени компиляции для оператора 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.
}