假设您有一个 C# 方法,其中包含一个块return
内的语句。try
是否可以修改finally
块中的返回值?
return
在块中使用的明显方法finally
不起作用:
String Foo()
{
try
{
return "A";
}
finally
{
// Does not compile: "Control cannot leave the body of a finally clause"
return "B";
}
}
有趣的是,这可以在 VB 中完成:Return
insideFinally
是被禁止的,但我们可以滥用这样一个事实(可能是出于向后兼容性的原因)VB 仍然允许通过将返回值分配给方法名称来修改它:
Function Foo() As String ' Returns "B", really!
Try
Return "A"
Finally
Foo = "B"
End Try
End Function
笔记:
请注意,我提出这个问题纯粹是出于对科学的好奇;显然,这样的代码非常容易出错和混淆,永远不应该编写。
请注意,我不是在询问
try { var x = "A"; return x; } finally { x = "B"; }
. 我知道这不会改变返回值,并且我理解为什么会发生这种情况。我想知道是否有办法通过 finally 块更改 try 块内设置的返回值。