我的问题是similar to this但我想知道如果我可以在旧版本的.NET中使用不同版本的C#。在我的脑海中,它必须是可能的,因为例如,Lambda与框架无关,它是一个C#(和VB,但我只在这里讨论C#)。语言版本和.net版本
问题是,我不能测试这只有VS 2005在工作,我的家用电脑已经坏了。
因此,在VS 2010/2012中创建.NET 2.0项目时,我可以使用lambda的/ Linq等吗?
我的问题是similar to this但我想知道如果我可以在旧版本的.NET中使用不同版本的C#。在我的脑海中,它必须是可能的,因为例如,Lambda与框架无关,它是一个C#(和VB,但我只在这里讨论C#)。语言版本和.net版本
问题是,我不能测试这只有VS 2005在工作,我的家用电脑已经坏了。
因此,在VS 2010/2012中创建.NET 2.0项目时,我可以使用lambda的/ Linq等吗?
如果您将目标框架设置为2.0并使用Visual Studio 2010,则可以使用Lambda表达式。但你不能使用LINQ在箱子外面,构架起以.Net 3.5推出
你应该看到的文章:Untangling the Versions by Jon Skeet
的语言版本和框架的版本实际上是绑在一起,和Visual Studio还将根据项目设置确定哪些功能可用。
对于.NET 2.0项目,您将无法使用LINQ,因为这将绑定到C#2.0而不是C#3.0(这是在引入LINQ时的情况,以及扩展方法的情况)。
请注意,3.0和3.5框架使用2.0 运行时间。
因此,在VS 2010/2012中创建.NET 2.0项目时,我可以使用lamda的/ Linq等吗?
我有一个page for exactly this sort of thing。有些功能是特定于框架(或CLR特定的),有些则不是。
例如,您可以使用lambda表达式,匿名类型和.NET 2.0自动实现的属性,而不会出现任何问题。
如果您提供替代实现(如LINQBridge),则可以使用LINQ to Objects。其他LINQ提供者(LINQ to SQL等)显然可能使用Mono的库,但个人而言,如果可能的话,我宁愿升级到更高版本的框架。
您将无法使用C#4中的动态类型,因为它需要仅存在于.NET 4中的类型,并且我认为这些类型不易以兼容的方式回溯。 (它可能是可能的,因为有至少为的DLR的.NET 3.5的版本,但无论是播放很好地与C#4的编译器则另当别论。)
有语言和编译器,还有CLR。您可以在CLR 2.0上运行.NET 2.0,3.0和3.5。您不能在CLR 2.0上使用.NET 4功能。
因此,您可以将项目设置为.NET 3.5,在具有.NET 3.5的计算机上编译它,并在具有.NET 2.0的计算机上运行它。
虽然您希望将其定位到2.0,以避免使用2.0中不存在的类型或成员。 –
毯子“你不能使用LINQ”有点强大,IMO。你不能使用LINQ开箱即用,但你可以使用LINQ的* some *方面进行一些工作。 –
@JonSkeet,谢谢,我的意思是开箱即用。我没有使用LINQBridge。我修改了我的答案以反映您的评论 – Habib