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
。
我在 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
。