简化了 Unity 中的 using 语句

Simplified using statements in Unity

我使用的是 Unity 2019.2.18f 和 VS 2019 16.4.3(CSC 版本 3.4.1-beta4-19610-02)。我对 Unity 和 C# 都很陌生。

我写了一些这样的代码:

using (UdpClient client = new UdpClient(...)) {
    ...
}

VS 2019建议语句可以简化为:

using UdpClient client = new UdpClient(...);
...

我想那是 C# 8.0 thing。但是,当我这样做时,回到 Unity 控制台,它会抱怨 using 语句中缺少括号:

Assets\Scripts\NavioRemote.cs(106,19): error CS1003: Syntax error, '(' expected
Assets\Scripts\NavioRemote.cs(106,101): error CS1026: ) expected

但是,VS 没有报告任何错误。

我有两个问题:

  1. 为什么 Unity 编译失败而 VS 认为它是正确的?
  2. 有没有办法让 Unity 接受这种语法?

Why is Unity failing to compile this while VS thinks it's correct?

在每个环境中,您使用不同的语言版本进行编译。 Unity 最多只支持 C# 7.3,而 VS 2019 支持一切。您的代码使用的语言功能需要 C# 8.0。

在 VS2019 中,转到项目的属性“构建”选项卡,您会在其中看到一个 "Advanced" 按钮。有一个下拉菜单可以选择语言版本。我相信它默认为 "Latest",您可能在列表中有 C# 8。如果将其更改为 7.3 或更低版本,您将看到 same/similar 行为。

Is there a way to make Unity accept this syntax?

没有。 Unity 目前最多只支持 7.3 语言版本。但如果你等几个月或几年,或者时间旅行,那么 Unity 就会赶上来。