2012-10-01 39 views
0

我的问题是similar to this但我想知道如果我可以在旧版本的.NET中使用不同版本的C#。在我的脑海中,它必须是可能的,因为例如,Lambda与框架无关,它是一个C#(和VB,但我只在这里讨论C#)。语言版本和.net版本

问题是,我不能测试这只有VS 2005在工作,我的家用电脑已经坏了。

因此,在VS 2010/2012中创建.NET 2.0项目时,我可以使用lambda的/ Linq等吗?

回答

1

如果您将目标框架设置为2.0并使用Visual Studio 2010,则可以使用Lambda表达式。但你不能使用LINQ在箱子外面,构架起以.Net 3.5推出

你应该看到的文章:Untangling the Versions by Jon Skeet

+1

毯子“你不能使用LINQ”有点强大,IMO。你不能使用LINQ开箱即用,但你可以使用LINQ的* some *方面进行一些工作。 –

+0

@JonSkeet,谢谢,我的意思是开箱即用。我没有使用LINQBridge。我修改了我的答案以反映您的评论 – Habib

0

的语言版本和框架的版本实际上是绑在一起,和Visual Studio还将根据项目设置确定哪些功能可用。

对于.NET 2.0项目,您将无法使用LINQ,因为这将绑定到C#2.0而不是C#3.0(这是在引入LINQ时的情况,以及扩展方法的情况)。

请注意,3.0和3.5框架使用2.0 运行时间

4

因此,在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的编译器则另当别论。)

+0

哈 - 我的最后几个问题是基于您的单例模式的例子 - 我想我应该真的购买这本书,因为它似乎涵盖了我尝试的很多地方了解。 :) – Dave

+0

编译器允许我创建一个动态类型,但不能以任何方式使用它! * var sb = new StringBuilder();动态dsb = sb; *编译没有错误,但我无法访问任何dsb方法!我想这是(根据您的意见),我需要.NET 4.0 – Dave

+0

@DaveRook:是的,我怀疑是这样 - 我真的很惊讶,它甚至可以做到这一点。 –

0

有语言和编译器,还有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的计算机上运行它。

+0

虽然您希望将其定位到2.0,以避免使用2.0中不存在的类型或成员。 –