尽管有ReSharper [NotNull]注释,我应该添加显式空值检查吗?

时间:2018-03-02 08:35:33

标签: c# null annotations resharper

我正在使用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]带注释的参数添加明确的可空性检查是否有意义?

1 个答案:

答案 0 :(得分:2)

我对此进行了测试,并且在使用[NotNull]标记参数时,您基本上告诉此参数不应采用空字符串。传递空值时,您将收到来自Resharper的警告,该警告告诉您"标记有[NotNull]属性的实体的可能空值分配。",但您没有收到错误,因此程序会编译。 在被调用的方法中防止空值是明智的。