C# langversion 7.3 但 IDE 仍然允许我添加 ?? (空合并运算符)

C# langversion at 7.3 but IDE still allows me to add ?? (null-coalescing operator)

我在 Visual Studio 2019(版本 16.9.2)上使用 C# 7.3。 IDE 允许我使用 null-coalescing 运算符并且它构建时没有错误。

我在任何地方都没有 Directory.Build.props 文件,我的 csproj 中有以下内容:

<PropertyGroup>
    <LangVersion>7.3</LangVersion>
</PropertyGroup>

我预计这会限制我使用 C# 7.3 版,当我用 #error version 确认时,我看到了这个:

Error CS8304 Compiler version: '3.9.0-6.21160.10 (59eedc33)'. Language version: 7.3.

所以我知道我确实在使用 C# 7.3。

为什么我仍然可以使用 ?? 空合并运算符?有任何故障排除提示吗?

以下是 official documentation on the operator 的摘录:

In C# 7.3 and earlier, the type of the left-hand operand of the ?? operator must be either a reference type or a nullable value type. Beginning with C# 8.0, that requirement is replaced with the following: the type of the left-hand operand of the ?? and ??= operators cannot be a non-nullable value type.

换句话说,空合并运算符确实存在,并且在 C# 7.3 及之前的版本中是允许的。使用 C# 7.3 只会限制您将常规值类型(结构或基元)放在左侧。即使在这里,两者之间的区别也很微妙。

基本上,在这两种情况下,唯一的限制是您必须有一个实际允许的左手操作数 null