假設您在try
塊中擁有一個使用return
語句的C#方法。是否可以修改finally
塊中的返回值?是否有可能在C#中的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 - 它已經被濫用了! – Oded
僅僅因爲你*可以*在VB中這樣做並不意味着你*應該*! –
停止使用VB.NET - 它已經夠用了! – PhonicUK