我在本地构建了我的项目,它使用类似于以下的代码:
bool success = true;
int y = 0;
int? x = success ? y : null;
Run Code Online (Sandbox Code Playgroud)
但是我们的构建机器失败并出现以下错误:
错误CS0173:无法确定条件表达式的类型,因为“int”和“<null>”之间没有隐式转换
因此,我必须将代码更新为:
bool success = true;
int y = 0;
int? x = success ? (int?)y : null;
Run Code Online (Sandbox Code Playgroud)
这使得构建机器正确构建了项目。我假设这是由于我在本地进行了构建机器没有的某种更新而发生的。也许是 C# 更新,但我找不到任何东西。有人知道最近是否有与此相关的更新吗?您有文档链接吗?
系统信息:
正如评论中提到的,您需要 C# 9.0(或更高版本)才能使用此类“目标类型”条件。
例如,使用 VS 2019 和 .NET Core 3.1 目标框架,将为您的原始代码生成以下内容:
错误 CS8400:功能“目标类型的条件表达式”在 C# 8.0 中不可用。请使用 9.0 或更高版本的语言。
将目标框架更改为 .NET 5.0(隐式使用 C# 9.0 标准)可以解决该问题。(您可能需要更新 Visual Studio 安装才能访问 .NET 5 框架构建工具。)