微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可空注释上下文与可空警告上下文

如何解决可空注释上下文与可空警告上下文

Microsoft的documentation for nullable reference types解释说,可为空的上下文是两个独立的二进制区别的叉积:可为空的注释上下文可以启用或禁用,可为空的警告上下文可以启用或禁用。但是我很难理解为什么一个可能启用了一个可为空的上下文而另一个禁用了。

我最好的解释是,这跟踪了生产者-消费者的区别。也就是说,X中启用的注释上下文允许使用X的Y在Y的启用警告上下文中具有有意义的警告。或换句话说,如果我想改善对代码用户的警告(无论是我自己代码的另一部分还是使用我创建的库的其他人),则应启用注释上下文,并且应该如果我要确保我对其他人创建的代码进行了适当的检查,请启用警告上下文,无论该代码是否正确标注。当然,理想情况下,一个人可能应该两者兼而有之,但是一个人可以优先考虑另一个

这是思考的正确方法吗?

解决方法

您几乎完全正确。

没有警告的可空注释主要用于那些希望为其使用者提供有用注释而不必进行代码更改以删除实现中的警告的库。因此,.NET Core标准库中的几个项目都使用<Nullable>annotations</Nullable>设置。例如:https://github.com/dotnet/runtime/blob/254ef0f7f7f429ec238735fe6132805e3c38a19f/src/libraries/Microsoft.Extensions.Logging.Console/src/Microsoft.Extensions.Logging.Console.csproj#L7

不带注释的可空警告适用于维护人员不希望对其类型进行注释或更改编码模式以删除可空警告的项目,但是如果编译器发现某些错误,他们希望获得一些基本的可空警告肯定是错的。例如

#nullable enable warnings

Widget x = null; // no warning. Type 'Widget' has oblivious nullability here.
if (HasWidget)
{
    x = GetWidget();
}
Console.WriteLine(x.Id); // however,'x' has a maybe-null state here,so this is a warning

但是,鼓励使用的设置肯定只是项目中的<Nullable>enable</Nullable>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。