代码之家  ›  专栏  ›  技术社区  ›  Thomas Flinkow

我是否应该添加显式null检查,而不管ReSharper[NotNull]注释?

  •  6
  • Thomas Flinkow  · 技术社区  · 6 年前

    我正在使用重竖琴 [NotNull] 注释如下:

    public void MyMethod([NotNull] string a)
    {
        if(a == null) // Warning: Expression is always false.
        {
            throw new ArgumentNullException();
        }
    
        // ...
    }
    

    然而,由于 NotNull 注释,ReSharper警告我未使用的前提条件检查,因为

    表达式始终为false

    但是,据我所知,这些注释 表明 参数不应为 null ; i、 e.他们 请勿禁止 呼叫者无法通过 无效的 ,例如,如

    this.MyMethod(null);
    

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

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

    所以我很喜欢 将前提条件检查包括在 无效的 ,但也许我错过了一个概念,或者没有正确理解它。


    在中包含显式可空性检查是否有意义 [非空] 带注释的参数?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Allen    6 年前

    我对此进行了测试,并在标记参数时使用 [NotNull] 您基本上告诉我们,此参数不应采用空字符串。当传递null值时,您将从Resharper收到一条警告,告诉您“对于标记有[NotNull]属性的实体,可能存在null赋值。”,但您没有收到错误,因此程序可以编译。 明智的做法是防止调用的方法中出现null。