C#语言版本7.3,但IDE仍然允许我添加??(空合并运算符)



我在Visual Studio 2019(16.9.2版(上使用C#7.3。IDE允许我使用null合并运算符,并且它的构建没有错误。

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

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

我预计这会将我限制在C#7.3版本,当我与#error version确认时,我会看到:

错误CS8304编译器版本:"3.9.0-6.21160.10(59eedc33("。语言版本:7.3。

所以我知道我真的在使用C#7.3。

为什么我仍然可以使用??空合并运算符?有什么故障排除技巧吗?

以下是关于运营商的官方文档摘录:

在C#7.3及更早版本中??运算符必须是引用类型或可为null的值类型。从C#8.0开始,该要求被替换为以下内容:??的左侧操作数的类型??并且??=运算符不能是不可为null的值类型。

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

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

最新更新