Unity 中使用语句的简化

6
我正在使用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 的语法。然而,当我这样做时,在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接受这种语法?

2
可能是因为您在VS中使用了更新的C#版本。Unity仅支持7.3语言和4.3运行时:https://docs.unity3d.com/Manual/CSharpCompiler.html - Thomas Cook
1
请记住,Unity不支持最新版本的C#/.Net Framework,因此存在语法差异和一些不可用功能。 - Samuel Goldenbaum
1
好处是:using 只是语法糖,用于关闭在括号中定义的资源,因此您仍然可以通过在 try 块之外声明 UdpClient 并在 finally 块中关闭/处理该 UdpClient 来实现您想要做的事情。 - Thomas Cook
2
@JasonC Roslyn是由微软开发的官方C#编译器,于2014/15年取代了先前的C#编译器。 - user47589
1
@JasonC 我花了一分钟才找到这个链接。https://medium.com/microsoft-open-source-stories/how-microsoft-rewrote-its-c-compiler-in-c-and-made-it-open-source-4ebed5646f98 - user47589
显示剩余2条评论
1个回答

6
为什么Unity编译失败,但是VS认为它是正确的? 在每个环境中,您都要使用不同的语言版本进行编译。Unity仅支持C# 7.3及以下版本,而VS 2019支持所有版本。您的代码使用了C# 8.0的语言特性。
在VS2019中,转到项目属性,找到构建选项卡,您将看到一个“高级”按钮。有一个下拉菜单选择语言版本。我相信它默认为“最新”,并且在列表中可能有C# 8。如果将其更改为7.3或更低版本,则会看到相同/类似的行为。
是否有办法使Unity接受此语法? 没有。Unity现在只支持最高到语言版本7.3。但是如果您等待几个月或几年,或者时间旅行,那么Unity将赶上潮流。

配置VS 7.3是个好选择,谢谢! - Jason C
当我进入项目属性(右键单击Assembly-CSharp->属性)时,什么也没有发生,似乎它立即关闭了...有什么建议吗? - Oneiros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接