2009-06-29 23 views
8

我有兩個構造看起來像這樣一類:CA1062:在共同構造ValidateArgumentsOfPublicMethods調用

public MyClass(SomeOtherClass source) : this(source, source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 

當我運行的FxCop,它正確地報告違反CA1062: ValidateArgumentsOfPublicMethods,因爲如果sourcenull第一個構造函數,它會在source.Name上拋出NullReferenceException

有什麼辦法解決這個警告?

我可以做一個擴展方法來檢查null並返回它的參數,但它會很醜。此外,據我瞭解,它不會解決警告,因爲FxCop不會意識到它的作用。

回答

10

是否這樣?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 
+0

是的,就是這樣。你也可以使用任何靜態方法。 – Groo 2009-06-29 18:28:15

0

我想說解決這個警告的唯一方法就是關閉它。 FxCop是一個很棒的工具,但有時候你需要記住它只是一個工具,並且可以提出一些不適合你的代碼的建議。

在這個例子中,我會說忽略警告或禁用它,如果你不想看到它。

1

有合法次關閉FxCop的警告,這很可能是一個,但你可以通過一個三元表達式檢查空,拋出異常(或替換默認值)糾正問題,或者調用一個靜態方法來檢查null並拋出相應的異常。