【发布时间】:2017-01-06 00:22:58
【问题描述】:
我是一名 C++ 开发人员,正在研究一些他不理解的 C#。代码的格式基本是:
bool method (params)
{
...
try
{
Do Some Stuff with some manual throws and some method calls;
}
catch (Exception e)
{
if (e is SomeSpecificTypeOfException)
throw e;
else
return false;
}
finally
{
Do Some More Stuff;
}
...
return true;
}
我应该如何解释这段代码?开发人员说他从未见过这种类型的用法,但可能“总是在退出方法之前执行 finally”,这意味着 catch then rethrow 在将 e 抛到它上面之前执行 finally 并且 catch/return 在到达结束后返回 false最后。这是正确的吗?
【问题讨论】:
-
是的,
finally总是在退出方法之前执行(无论是通过return还是throw)。 -
这里是异常处理文档的链接:msdn.microsoft.com/en-us/library/ms173162.aspx
-
重要的是要注意,像这样重新抛出 e 会破坏你的堆栈跟踪,最好有
throw;保留堆栈跟踪。