什麼時候適合使用ThrowHelper而不是直接投擲?什麼時候應該使用ThrowHelper方法而不是直接投擲?
void MyMethod() {
...
//throw new ArgumentNullException("paramName");
ThrowArgumentNullException("paramName");
...
}
void ThrowArgumentNullException(string paramName) {
throw new ArgumentNullException(paramName);
}
我讀過,調用ThrowHelper方法(與拋出異常的唯一方法purpouse),而不是直接扔應該產生較小的字節碼。
這個和明顯的封裝(另一個間接層)可能是不直接拋出的好理由,至少在某些場景中是這樣。
無論如何,國際海事組織的弊端也不是非實質性的。
- 的(例外)控制流程被隱藏
- 異常的一部分最終具有更隱蔽棧跟蹤
- 編譯器(2.0)將無法識別ThrowHelper調用是出口點從一種方法,因此一些代碼是必要的。
我有限的經驗是,總體設計往往變得更糟。
int MyMethod(int i) {
switch (i) {
case 1:
return 1;
default:
ThrowMyException();
}
return 0; // Unreachable (but needed) code
}
這可能部分是個人品味的問題。無論如何,你對這個問題的個人指導方針是什麼?你是否發現使用ThrowHelpers來執行所有常見任務,如方法參數驗證(ThrowArgumentNullException(paramName)等)是一個好主意? 我在這個問題上錯過了一些明顯的東西嗎?
btw我試圖不要混淆這個問題與驗證問題,例如,一種方法,如:
ThrowIfNameIsNullOrEmpty(name);
哇。我以前沒有看到過這種模式,但是和我一樣,我的直接反應非常消極。對絕大多數情況來說,字節碼大小必定是不成熟的優化。 – bobince 2009-12-30 13:20:24
微軟在設計Stack時使用ThrowHelper:http://pastebin.com/p2k4URtU –
2012-05-18 19:54:11