質問

私はインデクサーを持っていて、それがnullでないかどうかを確認したいのですが、それがargumentnullexceptionを投げますが、Gendarmeは警告を設定します

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;
    }
}

インデクサーを修正するにはどうすればよいですか?

役に立ちましたか?

解決

まあ、それは今のところ間違いなく正しくありません。これを見てください:

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

つまり、「キー」が実際に「価値」であるべきである場合に「キー」がヌルであると主張する例外をスローすることを意味します。

したがって、コードは次のようになります。

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

それが警告を修正するかどうかはわかりませんが、それは正しいコードになります。

このバグレポート これは、修正されていないGendarmeのバグであることを示唆しています。そのインデクサーのためだけに警告を明示的に無効にすることができるなら、それはおそらく最善の方法です。 (私はGendarmeを使用していないので、それが実行可能かどうかはわかりませんが、調べる価値があります。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top