有没有办法在 .NET 4 中使用 C# 6 或更高版本?
Is there a way to use C# 6 or higher in .NET 4?
我有一个使用 .NET 4 的遗留应用程序。
我在更改代码时尝试使用 C# 6 功能,但我的 visual studio 生成以下错误:
Feature 'interpolated strings' is not available in C# 4. Please use language version 6 or greater.
请问有没有什么方法可以在不更新框架版本的情况下使用最新版C#的特性?
或者是C#版本直接和框架挂钩?
obs:更新框架不是一个选项。
您需要 Visual Studio 2013 或 @ 2015 才能使用 c sharp 版本 6 您可以在项目设置中更改 .net 版本。 .NET 版本不会有问题
语言版本是编译器功能,不是运行时功能。
无论您使用哪种源代码语言语言或源代码语言版本,最终结果将始终是相同的 MSIL 代码。您可以自由选择要针对哪个 Framework 版本进行编译。这限制了您可用的 .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
语言版本只依赖于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 版本中被释放。
我有一个使用 .NET 4 的遗留应用程序。
我在更改代码时尝试使用 C# 6 功能,但我的 visual studio 生成以下错误:
Feature 'interpolated strings' is not available in C# 4. Please use language version 6 or greater.
请问有没有什么方法可以在不更新框架版本的情况下使用最新版C#的特性?
或者是C#版本直接和框架挂钩?
obs:更新框架不是一个选项。
您需要 Visual Studio 2013 或 @ 2015 才能使用 c sharp 版本 6 您可以在项目设置中更改 .net 版本。 .NET 版本不会有问题
语言版本是编译器功能,不是运行时功能。
无论您使用哪种源代码语言语言或源代码语言版本,最终结果将始终是相同的 MSIL 代码。您可以自由选择要针对哪个 Framework 版本进行编译。这限制了您可用的 .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
语言版本只依赖于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 版本中被释放。