2011-07-25 32 views
4

我今天的討論關於重構這個(#1)在C#中拋出異常,警衛

public void MyFunc(object myArgument) 
{ 
    if(myArgument == null) 
     throw new ArgumentNullException("myArgument"); 
.... 

有了這個(#2)

​​

我的直覺是,#1是爲更好原因如下:

  1. #1比#2更簡單,因爲它不需要知道Util庫,只需要基本的C#知識
  2. #1不會刪除resharper重命名傳遞給ArgumentNullException構造函數的字符串的能力。
  3. #2將增加的依賴關係的代碼(必須能夠訪問含有該DLL的DLL)
  4. 堆棧跟蹤不會爲#2相同的,因爲這將是#1

我這裏的問題是: 我的直覺是否正確? 事實上,我們從另一個程序集拋出異常不會在某些情況下變成麻煩?

回答

2

對於這種特殊情況,您不應該使用Guard。你應該使用代碼合同。

Contract.Requires(myArgument != null); 
+0

請問這是否真的和上面的發佈版本一樣運行? –

+0

@Casper Leon Nielsen:你可以這樣做,是的。 – jason

2

您可以從排名第2的標準化異常處理在一定程度上跨多個項目也受益;抽象還使庫在後一時間得到增強並且例如重新分配。例如錯誤記錄。