我正在使用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]
注释参数包含显式可空性检查是否有意义?
我测试了这个,当用[NotNull]
标记参数时,你基本上告诉这个参数不应该是一个空字符串。传递空值时,您将收到来自Resharper的警告,该警告告诉您“标记为[NotNull]属性的实体可能为空分配。”,但您没有收到错误,因此程序将编译。在被调用的方法中防止空值是明智的。