我已经看过 C# 的可空上下文的文档,但有一些我不明白的地方:
为任何代码段启用可空上下文是否会在将 null 分配给“不应该为空”类型时开始显示警告?
我的印象是它会告诉编译器“我保证这不会为空,所以闭嘴吧。”但似乎恰恰相反? “让我知道什么时候可以为 null,因为我很偏执。”?
是这样吗?
Microsoft 在 C# 8 中引入了“可空感知上下文”。
”在可空感知上下文中:
不可空引用类型 T 和可空引用类型 T 之间的区别?由编译器对前述规则的解释强制执行。一个T类型的变量和一个T类型的变量?由相同的 .NET 类型表示。”
如果启用了可空感知上下文并且在声明变量时未分配任何值,则会给出以下警告:
“CS8618 - 退出构造函数时,不可为空的变量必须包含非空值。考虑将其声明为可空。”
示例:
string notNull = "Hello";
string? nullable = default;
notNull = nullable!; // null forgiveness
可以使用项目文件中的
<nullable>enable</nullable
或禁用属性打开和关闭此功能。由于该功能默认是禁用的,因此也可以删除该属性来禁用它。
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
附加信息: