我是否应该添加显式空检查,尽管 ReSharper [NotNull] 注释



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

相关内容

  • 没有找到相关文章

最新更新