8

次のような2つのコンストラクターを持つクラスがあります。

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

FxCopを実行すると、CA1062:ValidateArgumentsOfPublicMethodsの違反が正しく報告されます。これsourcenull、が最初のコンストラクターにある場合、をスローするためです。NullReferenceExceptionsource.Name

この警告を修正する方法はありますか?

nullをチェックしてその引数を返す拡張メソッドを作成することはできますが、それは醜いでしょう。また、私が理解しているように、FxCopはそれが何をするのかを理解しないので、警告を解決しません。

4

5 に答える 5

10

このような?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { }
public MyClass(SomeOtherClass source, string name) { /* ... */ }
于 2009-06-29T18:11:51.353 に答える
1

FxCop警告をオフにする正当な時期があり、これは1つである可能性がありますが、nullをチェックして例外をスローする(またはデフォルト値を置き換える)3項式、または静的な呼び出しのいずれかによって問題を修正できます。 nullをチェックし、適切な例外をスローするメソッド。

于 2009-06-29T18:15:00.210 に答える
1

C# 7.0 以降では、次のようにすることもできます。

public MyClass(SomeOtherClass source) : this(source?.Name ?? throw new ArgumentNullException(nameof(source))) { }

C# 7.0 では、式として例外をスローできます。( Microsoft Docsを参照)

于 2019-10-14T09:50:58.023 に答える
0

この警告を修正する唯一の方法は、それをオフにすることだと思います。FxCopは優れたツールですが、これは単なるツールであり、コードに常に適合するとは限らない提案を行う可能性があることを覚えておく必要がある場合があります。

この例では、警告を無視するか、表示したくない場合は無効にします。

于 2009-06-29T18:10:38.360 に答える