【发布时间】:2019-11-06 15:21:35
【问题描述】:
如果在编写类库时启用了nullable reference types,开发人员可能不会总是检查null,因为编译器不会给出警告/错误。
在启用了可为空引用类型的库中获取以下代码:
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);
是否有可能以某种方式强制(或至少警告)使用代码以启用可空引用类型?
【问题讨论】:
-
使用 NRT 并不能让您不必对参数进行空值检查(至少在公共 API 上)
-
NRT 只是注释,故意增加获得至少可用的东西的几率,而不是完美的。如果调用代码不知道 NRT,它将获得与它们根本不存在相同的行为。在不完全破坏向后兼容性的情况下,没有切实可行的方法来强制执行不同的行为,这将使该功能的用处大大降低。使用
#nullable warnings可以自愿选择加入,但您不能让调用者尊重您的 NRT,即使只是作为警告 - 这是设计使然。
标签: c# .net-core .net-core-3.0 c#-8.0 nullable-reference-types