将 int 转换为 int?可能更新吗?

Mar*_*elo 12 c# visual-studio

我在本地构建了我的项目,它使用类似于以下的代码:

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# 更新,但我找不到任何东西。有人知道最近是否有与此相关的更新吗?您有文档链接吗?

系统信息:

  • 适用于 Mac 的 Visual Studio 社区 2019
    • 版本 8.8.3(内部版本 16)
      • GTK+ 2.24.23(罗利主题)
      • Xamarin.Mac 6.18.0.23 (d16-6 / 088c73638)
      • 软件包版本:612000107

Adr*_*ica 8

正如评论中提到的,您需要 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 框架构建工具。)

  • 另请参阅此处:https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/#target-typed--and- (2认同)