次のコードを検討してください。
public static void Foo()
{
Bar(null);
}
public static void Bar([NotNull] string s)
{
if (s == null)
throw new ArgumentNullException("s");
}
この[NotNull]
属性は、nullであってはならないBar
呼び出し元に通知するために使用されます。s
これは正常に機能し、nullをBar
(「NotNull」属性でマークされたエンティティへの「null」割り当ての可能性)に渡すと警告が表示されます。
しかし、それは実際に私がnullを渡すことを妨げるわけではないので、Bar
それでもnullかどうかをチェックする必要s
があります。では、なぜ私も警告を受け取るのですかif (s == null)
(式は常にfalseです)?
私の知る限り、この属性にはあいまいな意味があります。コンテキストに応じて、2つの異なることを意味する場合があります。
- 呼び出し元の場合:null引数を渡さないでください
- 呼び出し先の場合:この引数はnullではありません
この属性を正しく使用していますか、それとも何かが足りませんか?
ところで、私はResharper 7 EAPを使用しているので、バグの可能性があります。ただし、報告する前に、使用法が正しいことを確認したいのですが...
編集:R#5.1を使用して同じことを試しました。呼び出しサイトには警告が表示されますが、メソッドには表示されません。JetbrainのYoutrackで報告します。
EDIT2:ここで報告されたバグ