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

标签 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 警告我未使用的前提条件检查,因为

expression is always false

但是,据我了解这些注释,它们只是指示参数永远不应该是null;即它们不禁止调用者传递null,例如如

this.MyMethod(null);

或者更不明显(更像是在真实代码中)

string foo = null;
this.MyMethod(foo);

因此,我觉得包含对 null 的先决条件检查确实有意义,但也许我遗漏了一个概念或没有正确理解它。


对带有 [NotNull] 注释的参数进行显式可空性检查是否有意义?

最佳答案

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

关于c# - 尽管有 ReSharper [NotNull] 注释,我是否应该添加显式空检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49065396/

相关文章:

c# - 使用 EXIF 工具替换原始文件

c# - 找不到类型或命名空间名称 'Google'

android - PackageManager.getInstalledPackages() 的 ActivityInfo[] 为空

java - 如何在单个注解中组合多个 Spring 测试注解?

java - 是否有带注释的 iBATIS 3 的综合示例或教程?

c# - 我应该学习 C# 还是 Java?

c# - wp7 水平滑动选择

ios - 在 Controller 之间传递数据 - 在展开 Optional 时意外发现 nil

delphi - 如何允许在 TDBLookupComboBox 中选择 NULL 值?

hibernate - 如何将 Where 子句应用于辅助表