有没有办法在 .NET 4 中使用 C# 6 或更高版本?

Dei*_*lho 2 .net c# .net-4.0

我有一个使用 .NET 4 的遗留应用程序。

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

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

在此处输入图片说明

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

还是C#版本直接跟框架挂钩?

obs:更新框架不是一种选择。

Him*_*ere 5

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

int MyProperty { get; set; } = -1;
Run Code Online (Sandbox Code Playgroud)

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

要改变语言版本通过项目属性- >建设- >高级- >语言版本。

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

var a = new { MyProperty = 1 };
Run Code Online (Sandbox Code Playgroud)

这为任何 .Net 版本编译。然而,匿名类型最常见的用例是使用 Linq 从数据库中获取数据。Linq 是在框架版本 3.5 中引入的,并且严重依赖于 C#3 中引入的 lambda 表达式和扩展方法:

var result = myCollection.Select(x => new { MyProperty = x.MyProperty });
Run Code Online (Sandbox Code Playgroud)

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

为了更好地了解 C#- (=language)-version 和 framework-version 之间的区别,请阅读这篇文章。另一边的这个线程列出了语言版本以及它们是在哪个版本的 VS 中发布的。