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

问题描述 投票:5回答:1

我正在使用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]注释参数包含显式可空性检查是否有意义?

c# null annotations resharper
1个回答
2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.