可以强制执行可为空的引用类型吗?

Possible to enforce nullable reference types?

如果 class 库是在启用 nullable reference types 的情况下编写的,开发人员可能不会总是检查 null,因为编译器不会给出 warnings/errors.

在启用了可空引用类型的库中获取以下代码:

public class Class1
{
    public void MyMethod(string s)
    {
        // don't check for null as compiler is happy
        s.ToLower();
    }
    public void MyMethod2(string? s)
    {
        // check for null as compiler is warning otherwise
        if (s != null)
        {
            this.MyMethod(s);
        }
    }
}

如果使用者在未启用可空引用类型的情况下调用 Class1.MyMethod,则他们在进行以下调用时不会收到警告:

var c = new Class1();
c.MyMethod(null);

是否有可能以某种方式强制(或至少警告)消费代码以启用可空引用类型?

这是不可能的,这是有充分理由的。如果它可以想象您向项目添加一个新库,它会迫使您更新数十万行代码。

由于可空性没有运行时影响,作为库作者,您应该始终在 public 接口中测试您的参数以验证无效输入。如果您验证 public 接口上的输入,则库内部可以安全地依赖可空性。