CA1062:共同コンストラクタの呼び出しにValidateArgumentsOfPublicMethods
-
21-08-2019 - |
質問
私はこのように見える2つのコンストラクタを持つクラスを持っています:
public MyClass(SomeOtherClass source) : this(source, source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
ValidateArgumentsOfPublicMethods :私はFxCopのを実行すると、、それは正しく CA1062の違反を報告しますA>、source
は最初のコンストラクタでnull
であれば、それはNullReferenceException
にsource.Name
をスローしますので。
この警告を修正する方法はありますか?
私はnullをチェックし、その引数を返す拡張メソッドを作ることができるが、それは醜いだろう。私は理解してFxCopのは、それが何をするか気付いていないだろうので、また、それは警告を解決しません。
解決
このような?
public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
他のヒント
がありFxCopの警告をオフにすると、これは非常によく1かもしれないが、あなたはnullをチェックし、例外がスローされます(またはデフォルト値を代入)三元の式のいずれかによって、問題を修正することができます正当な時間がある、またはコールヌルをチェックし、適切な例外をスローする。静的メソッドを
この質問は、私はちょうどあなたが今もこれを使用することができますC#で、後に機能を注意したいいくつかの時間前に頼まれたのでます:
public MyClass(SomeOtherClass source) : this(source, source?.Name) { }
私はこの警告を解決する唯一の方法は、それをオフにするだろうと言うでしょう。 FxCopのは素晴らしいツールですが、時にはあなたはそれだけのツールであり、常にあなたのコードにフィットしていない提案をすることができることを覚えておく必要があります。
この例では、私はあなたがそれを表示したくない場合は、警告を無視するか、それを無効だと思います。
所属していません StackOverflow