我有以下代码段/示例。这不是我正在编写的代码,以便提出一个关于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块中有异常,它将会捕获。但是如果catch中有return语句,那么最后会执行吗?这是编写catch的最终方法吗?
答案 0 :(得分:14)
在已处理的异常中,保证关联的finally块 要运行。但是,如果异常未处理,则执行 finally块取决于异常展开操作的方式 触发。反过来,这取决于您的计算机的设置方式。 有关详细信息,请参阅Unhandled Exception Processing in the CLR。
参考:Try-Finally
答案 1 :(得分:10)
是的finally
将被执行,即使您之前有return
的内容。
finally块对于清理try块中分配的任何资源以及运行任何必须执行的代码(即使try块中发生异常)也很有用。通常,当控制离开try语句时,执行finally块的语句,是否由于正常执行而发生控制转移,执行break,continue,goto或return语句,还是传播异常在try语句之外。
答案 2 :(得分:4)
即使finally
块内有回复,也会执行catch
始终执行阻止
答案 3 :(得分:3)
finally
将在退出catch块后执行(通过显式“return”)。但是,在 finally块之后的所有(在您的情况下为if (vm.Detail.Any()) ...
)将不执行。
答案 4 :(得分:2)
尽管catch块中有return语句,finally块中的代码仍会运行。 但是,我个人会将结果分配给变量并在块之后返回它。 但那只是品味问题。