我注意到,C#編譯器(.NET 4.5.2)不允許我編譯下面的代碼:爲什麼out參數需要在try和catch部分內初始化?
public void Test(out string value)
{
//value = null;
try
{
value = null;
}
catch (Exception ex)
{
//value = null;
}
}
它失敗,出現以下錯誤:
The out parameter 'value' must be assigned to before control leaves the current method
但如果我正在取消catch
部分中的作業,它編譯成功。
很明顯,它也編譯我在try
聲明之前取消註釋。
所以問題是爲什麼它不足以在try塊中初始化參數out
?爲什麼我不得不在catch
模塊中進行初始化?
此代碼永遠不會失敗,但編譯器在編譯時不檢查它。 –
@ M.kazemAkhgary:你怎麼知道它永遠不會失敗?在'null'可以存儲在變量中之前,必須用'ldnull'將它壓入堆棧。沒有理由不能導致'StackOverflowException'或其他什麼。 –
@DarkFalcon請添加作爲答案 - 所有其他答案只是引用語言規範。我正在尋找一個真正的原因,但想不出一個。 – xxbbcc