考虑以下代码:
public static void Foo()
{
Bar(null);
}
public static void Bar([NotNull] string s)
{
if (s == null)
throw new ArgumentNullException("s");
}
该[NotNull]
属性用于Bar
告诉调用者s
不应为空。这工作正常,当我将 null 传递给Bar
(可能的 'null' 分配给标有 'NotNull' 属性的实体)时,我会收到警告。
但它实际上并没有阻止我传递 null,所以Bar
仍然必须检查是否s
为 null。那么为什么我也会收到警告if (s == null)
(表达式始终为假)?
据我所知,这个属性的含义不明确;根据上下文,它可能意味着两种不同的东西:
- 对于调用者:不要传递空参数
- 对于被调用者:此参数不为空
我是否正确使用了这个属性,或者我错过了什么?
顺便说一句,我使用的是 Resharper 7 EAP,所以它可能是一个错误;但是我想在报告之前确保我的用法是正确的......
编辑:在工作中用 R# 5.1 尝试了同样的事情;它在调用站点上显示警告,但不在方法中。我会在 Jetbrain 的 Youtrack 上报告它。
EDIT2:此处报告的错误