argumpnullexception、インデクサー、およびジェンダームルールエラー
-
27-10-2019 - |
質問
私はインデクサーを持っていて、それが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を使用していないので、それが実行可能かどうかはわかりませんが、調べる価値があります。)
所属していません StackOverflow