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

ili*_*ias 47 .net c# requirements c#-7.0

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

dme*_*lio 99

您不需要以.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");
}
Run Code Online (Sandbox Code Playgroud)

同样,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)
  • 参考退货
  • 抛出表情
  • 表达身体的吸气剂和二传手
  • 表达身体的构造者和终结者

  • 很难找到C#7中真正的内容,很少有人说出更真实的词.可悲的是,我怀疑很多这些文章,几个月前写的,将永远不会更新,以反映真实的功能列表. (3认同)

Ser*_*erG 5

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