我正在使用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] 属性的实体可能为空赋值",但您没有收到错误,因此程序会编译。明智的做法是防止正在调用的方法出现空值。