Выполняется ли код в итоге, если у меня есть возврат в мой catch() в С#?
У меня есть следующий фрагмент кода/пример. Это не работает код, я просто написал это, чтобы задать вопрос об уловке, наконец и вернуть:
try
{
doSomething();
}
catch (Exception e)
{
log(e);
return Content("There was an exception");
}
finally
{
Stopwatch.Stop();
}
if (vm.Detail.Any())
{
return PartialView("QuestionDetails", vm);
}
else
{
return Content("No records found");
}
Из того, что я понимаю, если в блоке try есть исключение, он поймает. Однако, если в уловке есть оператор return, будет ли наконец выполнен? Это правильный способ закодировать уловку и, наконец,?
Ответы
Ответ 1
В рамках обработанного исключения гарантированный связанный блок finally для запуска. Однако, если исключение необработанно, выполнение блок finally зависит от того, как выполняется операция исключения срабатывает. Это, в свою очередь, зависит от того, как настроен ваш компьютер. Для получения дополнительной информации см. Обработка необработанных исключений в среде CLR.
Ссылка: Try-finally
Ответ 2
Да finally
будет выполнен, даже если вы return
что-то раньше.
Блок finally полезен для очистки любых ресурсов, выделенных в блоке try, и для запуска любого кода, который должен выполняться, даже если в блоке try возникает исключение. Как правило, инструкции блока finally выполняются, когда элемент управления оставляет оператор try, независимо от того, происходит ли передача управления в результате нормального выполнения, выполнения разрыва, continue, goto или return statement или распространения исключения из инструкции try.
Дополнительная информация
MSDN - try-finally (ссылка С#)
Ответ 3
finally
будет выполняться, даже если в блоке catch
есть возврат
блок finally всегда выполняется
Ответ 4
finally
будет выполняться после выхода catch-блока (в вашем случае с помощью явного "возврата" ). Тем не менее, все после окончательного блока (в вашем случае if (vm.Detail.Any()) ...
) не будет выполняться.
Ответ 5
Код в блоке finally будет работать, несмотря на оператор return в вашем блоке catch.
Тем не менее, я лично назначил результат переменной и вернул бы ее после блока.
Но это просто вопрос вкуса.