C# 使用VisualStudio2008在2.0中实现C.NET3.0/3.5功能
升级到VisualStudio2008后,.NET2.0中可以使用哪些特定于C3.0/3.5的新功能?此外,还有哪些功能不可用 可用 兰博达斯 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见 不可用 表达式树 WPF/Silverlight库C# 使用VisualStudio2008在2.0中实现C.NET3.0/3.5功能,c#,.net,visual-studio,C#,.net,Visual Studio,升级到VisualStudio2008后,.NET2.0中可以使用哪些特定于C3.0/3.5的新功能?此外,还有哪些功能不可用 可用 兰博达斯 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见 不可用 表达式树 WPF/Silverlight库 Lambdas和扩展方法完全由编译器处理,可以与.Net 2.0框架
Lambdas和扩展方法完全由编译器处理,可以与.Net 2.0框架一起使用。要定义扩展方法,如果目标是.Net 2.0,则需要提供以下类:
namespace System.Runtime.CompilerServices {
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
sealed class ExtensionAttribute : Attribute { }
}
您可以使用编译器通过发出2.0兼容IL来处理的任何新的C 3.0功能,并且不引用任何新的3.5程序集: Lambdas用作Func,而不是表达式 通过声明空System.Runtime.CompilerServices.ExtensionAttribute来扩展方法 自动属性 对象初始值设定项 集合初始值设定项 通过实现IEnumerable扩展方法将LINQ转换为对象,请参见
之前有一个关于类似内容的讨论,您可能也想阅读:
几乎所有的东西!丹尼尔·莫思(Daniel Moth)报道了这一点。这只剩下运行时支持:LINQtoObjects由提供,只剩下更大的API,如表达式支持,以及LINQtoSQL等工具。这些文件太大,无法合理地移植回.NET2.0,因此我会使用.NET3.5来处理这些文件 我在一篇文章中谈到了这一点
针对.NET2.0时,几乎所有C3.0功能都可用。对于扩展方法,您需要定义一个额外的属性。表达式树根本不可用。查询表达式支持是基于一个翻译,后面跟着普通的C规则,因此您需要一些东西来提供Select、Where等方法。是.NET2.0实现中事实上的标准LINQto对象。您可能希望在Func和Action委托族中声明委托,以便更轻松地使用lambda表达式,然后如果/当您移动到.NET 3.5时,您可以使用完全支持LINQ和表达式树的Mono版本System.Core,则删除它们。 我根据.net2.0编译了它的源代码,现在我可以在.net2.0项目中使用它。
这对于需要部署在win2k上的项目非常有用,因为在win2k上.net3.5不可用。Lambdas作为代理,是的。但是lambdas作为表达式依赖于.NET3.5中的表达式类。我也不得不这样做。我发现您在另一个站点上建议这样做,以便能够在3.5SP1项目中使用Ninject 1.0 for 2.0。非常复杂…这些表达式树需要.NET2.0SP1吗?不需要。纯旧的.NET2.0。即使在win2k机器上也能很好地工作。表达式树可以通过使用Mono获得。见下面我的答案。