2011-01-31 21 views
0

我有索引,並要檢查,如果是它不是空的,如果是則拋出ArgumentNullException,但憲兵設置警告ArgumentNullException,索引和憲兵規則錯誤

InstantiateArgumentExceptionCorrectlyRule:此方法拋出的ArgumentException (或派生)異常而不指定現有參數名稱。這可以向開發人員隱藏有用的信息。修復異常參數以使用正確的參數名稱(或確保參數按照正確的順序)。

public override LocalizedString this[string key] 
{ 
    get 
    { 
     if (key == null) 
     { 
      throw new ArgumentNullException("key"); 
     } 
     return base[key]; 
    } 
    set 
    { 
     if (key == null || value == null) 
     { 
      throw new ArgumentNullException("key"); 
     } 
     base[key] = value; 
    } 
} 

我該如何解決我的索引器問題?

回答

6

那麼,現在絕對不對。看看這個:

if (key == null || value == null) 
{ 
    throw new ArgumentNullException("key"); 
} 

這意味着它會拋出一個異常,聲稱「鍵」爲空時,它應該實際上是「價值」。

因此,代碼應該是這樣的:

if (key == null) 
{ 
    throw new ArgumentNullException("key"); 
} 
if (value == null) 
{ 
    throw new ArgumentNullException("value"); 
} 

我不知道這是否會解決警告或不是,但它是正確的代碼。

This bug report表明這是一個尚未修復的Gendarme中的錯誤。如果您可以明確禁用該索引器的警告,那可能是最好的方法。 (我沒有使用憲兵,所以我不知道這是否可行,但值得研究。)