编辑 [2020年11月29日]: .NET 5.0已经发布,但如果您的目标是.NET Standard 2.1,则仍需要下面的解决方案。
C# 9.0仍在开发中。有几个参考资料让我相信现在应该可以测试一些功能。
- 由Mr. Awesome本人撰写的微软博客,介绍了这些功能。https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
- Github上的语言跟踪页面:https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md
我正在使用VS 2019 16.7预览版3.1。我已将语言版本选择为预览版,以供项目使用。
我可以使用一些C# 9特性。例如:Dictionary<string, object> Stuff = new()
但是使用新的init
特性会导致此错误:Error CS0518 预定义类型“System.Runtime.CompilerServices.IsExternalInit”未定义或未导入
我该如何解决这个问题?
导致错误的代码示例:
class Test
{
public int Hello { get; init; }
}
和
record Test(int hello);
记录定义是一种速记方式,会扩展为使用init
的内容,这就是为什么它也会受到影响的原因。
我上面链接的语言跟踪页面显示该功能已经合并到16.7p3
,而我正在使用此版本。
我是不是太兴奋了?我需要等待吗?还是说有办法现在就尝试这些特性:D?
编辑(在评论中请求)- 添加了.net 5.0控制台应用程序的csproj文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
编辑 #2: 这里发布了一个解决方法 - https://github.com/dotnet/roslyn/issues/45510
IsExternalInit
是什么意思吗?只是好奇。 - Qwertienew Test(){Hello=9999}
的操作。 - Hieu Le