Unity3d启用C#9后使用record类型仍出现编译错误求助
Unity中使用C# record类型解决IsExternalInit编译错误的方法
你在Unity启用C# 9后使用record类型时遇到的编译错误,本质是因为record依赖的init-only setter语法需要System.Runtime.CompilerServices.IsExternalInit这个标记类型,但该类型只在.NET 5及以上版本中存在,而Unity目前不支持这些高版本.NET,所以得手动补全这个类型来绕过限制。
具体解决步骤:
- 在Unity项目的任意代码目录下新建一个C#脚本,命名为
IsExternalInit.cs - 将以下代码粘贴到脚本中:
namespace System.Runtime.CompilerServices { public class IsExternalInit { } }
- 保存脚本,回到Unity等待编译完成,此时record相关的编译错误就会消失
这个空类只是一个编译器需要的标记,不需要任何额外实现,它的作用是让C#编译器认为IsExternalInit类型已存在,从而正常解析record的语法。Unity的C# 9支持已经包含了record的核心特性,只是缺失这个标记类而已。
内容的提问来源于stack exchange,提问作者rhughes
相关产品推荐
相关产品推荐

