Unity 中简化的 using 语句

Jas*_*n C 6 c# idisposable using unity-game-engine visual-studio-2019

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

我写了一些这样的代码:

using (UdpClient client = new UdpClient(...)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

VS 2019 建议该声明可以简化为:

using UdpClient client = new UdpClient(...);
...
Run Code Online (Sandbox Code Playgroud)

我猜这是C# 8.0 的事情。然而,当我这样做时,回到 Unity 控制台,它抱怨声明中缺少括号using

Assets\Scripts\NavioRemote.cs(106,19): error CS1003: Syntax error, '(' expected
Assets\Scripts\NavioRemote.cs(106,101): error CS1026: ) expected
Run Code Online (Sandbox Code Playgroud)

然而,VS 没有报告任何错误。

我有两个问题:

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

小智 6

为什么Unity编译失败而VS认为它是正确的?

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

在 VS2019 中,转到项目的属性“生成”选项卡,您将在其中看到“高级”按钮。有一个下拉菜单可以选择语言版本。我相信它默认为“最新”,并且列表中可能有 C# 8。如果将其更改为 7.3 或更低版本,您将看到相同/相似的行为。

有没有办法让Unity接受这个语法?

不可以。Unity 目前仅支持最高版本 7.3 的语言。但如果你等待几个月或几年,或者时间旅行,那么 Unity 就会赶上。