如MSDN所 提到:
当在 Try 或 Catch 块中遇到 Return 语句时,位于 Finally 块中的代码会在该 Return 语句执行之前运行。在这种情况下,Finally 块中的 Return 语句会先执行,导致返回值不同。为了避免这种可能引起混淆的情况,请勿在 Finally 块中使用 Return 语句。
由于我对此笔记并不是很理解,我将以 VB.NET 为例(我认为在 C# 中情况也类似):
Try
HugeOp()
Return "OK"
Catch
Return "NOK"
Finally
Return "Finally"
End Try
现在,为什么在C#和VB.NET中这样做是不合法的呢?
function m() { try { return 1; } finally { return 2; } }
调用m()
将返回2。实现这个功能对于开发团队来说非常棘手。在Java中也是合法的。 - Eric Lippert