是否可以在.NET 4中使用C#6或更高版本?

时间:2018-10-17 11:26:56

标签: c# .net .net-4.0

我有一个使用.NET 4的旧版应用程序。

更改代码时,我尝试使用C#6功能,但是我的Visual Studio生成以下错误:

  

功能“插值字符串”在C#4中不可用。请使用语言版本6或更高版本。

enter image description here

我想知道是否有一种方法可以使用最新版本的C#的功能而不更新框架的版本?

还是C#版本直接与框架链接?

obs:不能更新框架。

3 个答案:

答案 0 :(得分:3)

语言版本仅取决于Visual Studio的版本。要使用C#6中引入的功能,您至少需要VS2015。这与已安装的.NET-framework-version无关。实际上,您可以使用VS2015及其编译器功能(例如,具有初始值的自动实现的属性)并针对.Net 2.0进行编译:

int MyProperty { get; set; } = -1;

要更改目标框架(例如.Net 2.0),请使用项目属性->应用程序->目标框架。

要通过项目属性->生成->高级->语言版本来更改语言版本

让我们考虑以下示例:从C#3开始,您可以编写以下内容:

var a = new { MyProperty = 1 };

这将为任何.Net版本进行编译。但是,匿名类型最常见的用例是使用Linq从数据库中获取数据时。 Linq是在3.5版框架中引入的,并且在很大程度上取决于Lambda表达式和扩展方法,这两种方法都是在C#3中引入的:

var result = myCollection.Select(x => new { MyProperty = x.MyProperty });

因此,尽管您可以在框架的早期版本中使用匿名类型,但几乎不需要这样做。

要更好地了解C#(=语言)版本和框架版本之间的区别,请阅读this post。另一边的This thread列出了语言版本以及VS的发行版本。

答案 1 :(得分:2)

语言版本是编译器功能,不是运行时功能。

无论使用哪种源代码语言语言或源语言版本,最终结果将始终是相同的MSIL代码。您可以自由选择要编译的Framework版本。 Wich限制了您可用的.NET库。但这不会以任何方式影响正在使用的C#版本。

当然,可能有些语言功能在没有支持库的情况下毫无意义。我只是想不出具体的例子。

编辑:记住一个具体示例:“命名参数”和“可选参数”。 IL始终支持这一点。 VB.Net已经有很长一段时间了。这是COM兼容性的一个非常重要的部分,尤其是使用Office COM互操作时。但是在C#4之前,我们的C#程序员无法使用它:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments

答案 2 :(得分:1)

您需要Visual Studio 2013或@ 2015才能使用c Sharp版本6您可以在项目设置中更改.net版本。 .NET版本不会有问题