【发布时间】:2013-04-09 01:04:59
【问题描述】:
假设您有一个 C# 方法,在 try 块内有一个 return 语句。是否可以修改finally块中的返回值?
在finally 块中使用return 的明显方法是行不通的:
String Foo()
{
try
{
return "A";
}
finally
{
// Does not compile: "Control cannot leave the body of a finally clause"
return "B";
}
}
有趣的是,这个可以在VB中完成:Return里面Finally是被禁止的,但是我们可以滥用这个事实(可能是出于向后兼容的原因)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"; }。我知道这不会改变返回值和I understand why this happens。我想知道是否有有种方法可以通过 finally 块来更改 try 块中设置的返回值。
【问题讨论】:
-
停止滥用 VB.NET - 它已经受到了足够的滥用!
-
仅仅因为你可以在VB中做到这一点并不意味着你应该!
-
停止使用 VB.NET - 它已经够用了!
-
@MattWilko:我从来没有声称你应该——看我问题的最后一句话。
-
我不会称这是对 VB 的滥用,它更像是 VB 滥用程序员,并通过其奇怪的临时规则和不一致将他们引向错误的轨道。