如果在c#中的catch()中有一个返回值,那么a中的代码最终会被执行吗?
我有以下代码片段/示例。我写这段代码不是为了问一个关于catch,finally和return的问题:如果在c#中的catch()中有一个返回值,那么a中的代码最终会被执行吗?,c#,try-catch-finally,C#,Try Catch Finally,我有以下代码片段/示例。我写这段代码不是为了问一个关于catch,finally和return的问题: try { doSomething(); } catch (Exception e) { log(e); return Content("There was an exception"); } finally { Stopwatch.Stop(); } if (vm.Detail.Any()) { return PartialView("Question
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和finally的正确方法吗?是的,
finally
将被执行,即使您返回了以前的内容
finally块用于清理try块中分配的任何资源,以及运行即使try块中发生异常也必须执行的任何代码。通常,finally块的语句在控件离开try语句时执行,无论是由于正常执行、执行break、continue、goto或return语句,还是由于异常从try语句传播而发生控制权转移
更多信息
即使在catch
块中有返回,也将执行finally
始终执行最终块
在已处理的异常中,保证关联的finally块
要运行。但是,如果未处理异常,则执行
最后,块取决于异常展开操作的方式
触发。这又取决于计算机的设置方式。
有关详细信息,请参阅
Ref:在退出catch块后,最终将执行(在您的示例中,通过显式“返回”)。但是,finally块之后的所有内容(在您的示例中,if(vm.Detail.Any())…
)将不会执行。尽管catch块中有return语句,finally块中的代码仍将运行。
但是,我个人会将结果分配给一个变量,并在块之后返回它。
但这只是品味的问题。谢谢-那么finally是在返回之前执行还是异步执行?finally将首先执行。