可为空注释上下文 vs 可为空警告上下文

4

微软的可空引用类型文档解释说,可空上下文是两个独立二进制区别的交叉乘积:可空注释上下文可以启用或禁用,可空警告上下文也可以启用或禁用。但我很难理解为什么有的人可能启用一个可空上下文而禁用另一个。

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

这样想是正确的吗?

1个回答

4

你的理解基本正确。

无警告的可空注释主要适用于希望为其消费者提供有用注释的库,而不必更改代码以删除实现中的警告。 .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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接