我正在使用ReSharpers [NotNull]
这样的注释:
public void MyMethod([NotNull] string a)
{
if(a == null) // Warning: Expression is always false.
{
throw new ArgumentNullException();
}
// ...
}
但是,由于NotNull
注释,ReSharper警告我未使用的前置条件检查,因为
表达总是假的
但是,据我理解这些注释,他们只表明该参数永远不应该是null
;即他们不禁止来电者通过null
,例如如在
this.MyMethod(null);
甚至不太明显(更像是真实的代码)
string foo = null;
this.MyMethod(foo);
因此我觉得 是否有意义包含null
的前置条件检查,但也许我错过了一个概念或者没有正确理解它。
为[NotNull]
带注释的参数添加明确的可空性检查是否有意义?
答案 0 :(得分:2)
我对此进行了测试,并且在使用[NotNull]
标记参数时,您基本上告诉此参数不应采用空字符串。传递空值时,您将收到来自Resharper的警告,该警告告诉您"标记有[NotNull]属性的实体的可能空值分配。",但您没有收到错误,因此程序会编译。
在被调用的方法中防止空值是明智的。