我的问题与此类似,但我想知道是否可以在旧版本的 .NET 中使用不同版本的 C#。在我看来,这一定是可能的,因为例如,Lambda 本身与框架无关,它是 C#(和 VB,但我在这里只谈论 C#)。
问题是,我无法对此进行测试,因为只有 VS 2005 在工作,而且我的家用电脑坏了。
那么,在 VS 2010/2012 中创建 .NET 2.0 项目时,我可以使用 lambda's / Linq 等吗?
那么,在 VS 2010/2012 中创建 .NET 2.0 项目时,我可以使用 lamda 的 / Linq 等吗?
我有一页正是这种事情。有些功能是特定于框架(或特定于 CLR)的,有些则不是。
例如,您可以毫无问题地使用 .NET 2.0 的 lambda 表达式、匿名类型和自动实现的属性。
如果您提供替代实现,例如LINQBridge ,则可以使用 LINQ to Objects 。其他 LINQ 提供程序(LINQ to SQL 等)显然可以使用 Mono 中的库,但如果可能的话,我个人宁愿升级到更高版本的框架。
您将无法使用 C# 4 中的动态类型,因为它需要仅存在于 .NET 4 中的类型,而且我认为这些类型不容易以兼容的方式向后移植。(这可能是可能的,因为至少有一个适用于 .NET 3.5 的 DLR 版本,但它是否与 C# 4 编译器配合得很好是另一回事。)
如果您将目标框架设置为 2.0 并使用 Visual Studio 2010,则可以使用 Lambda 表达式。但是您不能开箱即用地使用 LINQ,因为该框架是在 .Net 3.5 中引入的
你应该看到这篇文章:Jon Skeet 的 Untangling the Versions
语言版本和框架版本实际上是捆绑在一起的,Visual Studio 还会根据项目设置确定哪些功能可用。
对于 .NET 2.0 项目,您将无法使用 LINQ,因为这将绑定到 C# 2.0 而不是 C# 3.0(这是引入 LINQ 的时候,扩展方法也是如此)。
请注意,3.0 和 3.5 框架使用 2.0运行时。
有语言和编译器,还有 CLR。您可以在 CLR 2.0 上运行 .NET 2.0、3.0 和 3.5。您不能在 CLR 2.0 上使用 .NET 4 功能。
Thus, you can set your project to .NET 3.5, compile it on a machine with .NET 3.5 and run it on a machine with .NET 2.0.