我的问题是similar to this但我想知道我是否可以在旧版本的.NET中使用不同版本的C#。在我的头脑中它必须是可能的,因为例如,一个Lambda与框架无关,它是一个C#(和VB,但我只是在谈论C#)。
问题是,我无法测试这个,因为只有VS 2005在工作,我的家用电脑坏了。
那么,在VS 2010/2012中创建.NET 2.0项目时,我可以使用lambda / Linq等吗?
答案 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 for .NET 3.5的一个版本,但是它与C#4编译器的搭配是否完全不同。 )
答案 1 :(得分:1)
如果将目标框架设置为2.0并使用Visual Studio 2010,则可以使用Lambda表达式。但是你不能使用LINQ开箱即用,因为该框架是在.Net 3.5中引入的。
答案 2 :(得分:0)
语言版本和框架版本实际上是捆绑在一起的,Visual Studio还将根据项目设置确定可用的功能。
对于.NET 2.0项目,您将无法使用LINQ,因为它将与C#2.0相关联,而不是C#3.0(这是引入LINQ时的扩展方法)。
请注意,3.0和3.5框架使用2.0 运行时。
答案 3 :(得分: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的计算机上运行它。