返回最后一块......为什么不呢?

ser*_*hio 19 .net try-catch-finally

正如MSDN 提到的那样:

Finally块中的代码在遇到Try或Catch块中的Return语句之后但在执行Return语句之前运行.在这种情况下,Finally块中的Return语句在初始Return语句之前执行.这给出了不同的返回值.要防止这种可能令人困惑的情况,请避免在Finally块中使用Return语句.

由于我从这个笔记中不了解很多,我将举一个例子(VB.NET,我认为在C#中情况类似):

Try
    HugeOp()
    Return "OK"
Catch
    Return "NOK"
Finally
    Return "Finally"
End Try
Run Code Online (Sandbox Code Playgroud)

现在,为什么在C#和VB.NET中这都是非法的

Tho*_*que 26

这是非法的,因为当你到达Finally块时,返回的值已经定义(如果一切顺利,则为"OK",如果发现异常,则为"NOK").如果您能够从Finally块返回不同的值,则无论上述指令的结果如何,都将始终返回此值.它只是没有意义......

  • 规范可以在finally语句中定义`return`的行为,但它喜欢.它可以返回旧的返回值,新的返回值或者是非法的.如果这些行为是可能的,他们选择将其视为非法行为.我同意这个决定. (12认同)