尽管有ReSharper [NotNull]注释,我应该添加显式空值检查吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尽管有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]属性的实体可能为空分配。”,但您没有收到错误,因此程序将编译。在被调用的方法中防止空值是明智的。
以上是关于尽管有ReSharper [NotNull]注释,我应该添加显式空值检查吗?的主要内容,如果未能解决你的问题,请参考以下文章