避免由于 CA1062 而在子类中重复进行空验证

Avoid repeated null validation in subclass due to CA1062

常见的继承模式:

public abstract class Parent
{
  public void Foo(string s)
  {
    _ = s ?? throw new ArgumentNullException(nameof(s));    //null guard
    DoOtherStuff();
    FooImpl(s);                                             //forward to child class
  }
  protected virtual void FooImpl(string s);
}

public class Child : Parent
{
  protected override void FooImpl(string s)
  {
    var l = s.Length;                                      //CA1062
  }
}

这给出 CA1062:

In externally visible method, validate parameter 's' is non-null before using it.

它已经被验证为非空。

我可以使用 NRT 属性或技巧来避免重复验证吗?我可以使用 s!,但我希望有更好的方法。

根据上面@CharlesMager 的评论,this 回购问题描述了潜在的问题。

总结是 CA1062 不是“NRT 感知”,因此使用 NRT 技巧无法避免此警告。

无法工作,因为被 CA1062 忽略了:

  • s!

作品:

  • 抑制警告,例如通过 pragma
  • 在childclass签名中使用[NotNull]
  • re-validate参数
  • 接受它