我有一个使用.NET 4的旧版应用程序。
更改代码时,我尝试使用C#6功能,但是我的Visual Studio生成以下错误:
功能“插值字符串”在C#4中不可用。请使用语言版本6或更高版本。
我想知道是否有一种方法可以使用最新版本的C#的功能而不更新框架的版本?
还是C#版本直接与框架链接?
obs:不能更新框架。
答案 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版本不会有问题