提问人:Eugene Pavlyuk 提问时间:6/20/2023 最后编辑:Eugene Pavlyuk 更新时间:6/20/2023 访问量:66
Null-coalescing out 参数不会给出错误
Null-coalescing out parameter doesnt give error
问:
本问题介绍与使用 Null-coalescing、Null-conditional 和 out 参数相关的错误: Null-coalescing out 参数给出意外警告 答案详细说明了此错误的原因。
但是当我将示例从问题复制到我的项目时,我没有收到错误,并且一切都会编译。我遇到了这样一个事实,即该项目是在我的计算机上编译的,但其他人有问题。这取决于环境吗?什么环境?
项目使用 .net5 和 С#8.0。我尝试了 VS2022、Rider 和控制台 msbuild 作为编译器,它们都编译成功。
答:
1赞
shingo
6/20/2023
#1
分析器已在 C#10 中针对类似表达式进行了改进,您可以查看这些链接了解详细信息。
如果使用旧编译器,则错误是可重现的。这是 SharpLab 上的一个示例。
1赞
Guru Stron
6/20/2023
#2
您似乎安装了更高版本的编译器(与您的同事机器相比)。从“选择要使用的 .NET 版本”文档中:
SDK 使用最新安装的版本
C# 10 实现了改进的确定赋值分析,这似乎解决了链接问题中的问题(查看示例)。
尝试将global.json文件添加到项目根目录,以设置用于编译项目的 SDK。像这样:
{
"sdk": {
"version": "5.0.0",
"rollForward": "latestMinor"
}
}
然后再次尝试编译(我目前的猜测是它应该会导致错误,另一件事要检查 - 安装在同事机器上的 .NET SDK - 使用 ,理论上此检查可以向后移植到 .NET 5 SDK)。dotnet --list-sdks
评论
0赞
Eugene Pavlyuk
6/20/2023
这意味着我从 C# 10 中获得了“改进的确定赋值分析”,但没有获得其他新功能,例如“非”模式?这对我不起作用。
0赞
Guru Stron
6/20/2023
@EugenePavlyuk基本上是的。它需要对编译器有更深入的了解,但分析可以实现为与语言版本无关,而模式需要特定的语言版本集。实际上,您可以尝试使用.NET版本设置比支持的语言版本更高的语言版本,并且一些较新的语言内容将起作用(如果存在较新的编译器)。
评论
.csproj
LangVersion