2011-11-01 47 views
3

我想問的是C#模擬C++「noexcept」屬性的方法,它不會產生任何異常。類似的東西:Noexcept equivilent在C#

public int SomeMethod() noexcept 
    { 
    throw new ArgumentNullException(); //Compile error: Method with 'noexcept' 
attribute can't generate exceptions. 
    } 

而當我想打電話給我的代碼,這個方法我沒有必要去想這個方法try/catch塊。

+0

我不相信有這樣的事情。你必須嘗試在你的'SomeMethod' –

+2

之內抓住我認爲在這個問題中有一個錯字,你的意思是'noexcept'嗎? – Oskar

+2

語言本身沒有任何內容,你需要使用靜態分析工具來執行這種約定。 – MattDavey

回答

3

據我所知,在C#中沒有這樣的東西(雖然我不是100%)。關於它的用途;當編寫乾淨的代碼時,你應該只處理異常,並且在你期望它們發生的地方。這樣可以使程序的流程和控制更易於管理。

如果你不知道的方法中可能出現的異常,或者發生異常,你沒想到的,那麼你需要確定是否異常的東西,被認爲是至關重要的(因爲它應該原因應用程序失敗);或者是否應該在代碼中專門處理。

+1

我希望更多的人有這樣的想法:「如果你沒有想到會發生什麼,崩潰很可能是最好的事情」。如果你想避免這種情況,只要確保你的所有「空白」try ... catch語句只發生在完全隔離的代碼中,而與應用程序的其他部分沒有共享狀態。否則,你會打開自己的非常奇怪的不一致性錯誤。我已經調試了很多這樣的應用程序,這是一個皇家的痛苦。 – Luaan