0

私はインデクサーを持っていて、それが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;
    }
}

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

4

1 に答える 1

6

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

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

つまり、実際には「値」であるはずの「キー」がnullであると主張する例外がスローされます。

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

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

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

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

于 2011-01-31T14:56:08.717 に答える