C#7 .NET / CLR / Visual Studio版本要求

问题描述 投票:45回答:2

运行C#7的最低.NET框架和CLR版本要求是什么?另外,我需要VS 2017来编译C#7吗?

c# .net requirements c#-7.0
2个回答
98
投票

您不需要以.NET 4.6及更高版本为目标,这是不正确的。要使用Tuples,您需要System.ValueTuple NuGet包。在https://www.nuget.org/packages/System.ValueTuple/上,您可以看到它支持4.5及更高版本,实际上,它支持4.0及更高版本。如果你想变得疯狂,如果你创建自己的System.ValueTuple类,它确实完成了该软件包的功能,它将在.NET 3.5上运行,也可能更老。对于“任务类”类型,您还需要一个NuGet包,https://www.nuget.org/packages/System.Threading.Tasks.Extensions/。根据其文档,此软件包也适用于.NET 4.5及更高版本。

其他C#7功能只适用于.NET 2及更高版本,因为它们只是语法糖。例如,我刚刚在.NET 2.0中编写了以下内容,它正确抛出:

static void Main(string[] args)
{
    string test = null;
    string d = test ?? throw new ApplicationException("test");
}

同样,int.TryParse("123", out int i);在.NET 2.0中运行得很好。

我没有测试每一个C#7的功能,但总的来说,除了元组(以及它们的相关功能,如解构),它应该在.NET 2.0及更高版本中工作,因为它大部分只是语法糖。话虽这么说,是的,你需要VS2017来编译C#7。我肯定在某些时候其他编译器会支持C#7但不支持今天。

功能我确认在.NET 2.0中工作:

  • 二进制文字
  • 数字分隔符
  • 内联out参数
  • 使用_丢弃参数
  • 本地功能
  • 基于类型的模式匹配if (obj is int i)case int i:
  • 恒定模式匹配if (i is 2)
  • Var模式匹配if (i is var j)
  • 参考退货
  • 抛出表情
  • 表达身体的吸气剂和二传手
  • 表达身体的构造者和终结者

3
投票

要使用开箱即用的C#7的全部功能(无需引用NuGet包等),您需要VS 2017和.NET 4.7作为目标框架。

© www.soinside.com 2019 - 2024. All rights reserved.