在.NET Framework 2.0中使用扩展方法

在Visual Studio 2008下
我可以创建一个扩展方法在.NET Framework 2.0项目下工作吗?

有一个丑陋的黑客让扩展方法在.Net 2.0中工作; 但最好将框架升级到3.5。

替代来源: 1,2 。

简而言之(来自链接#2):扩展方法只是用[Extension]属性标记的普通静态方法。 这个属性实际上只是由幕后编译器添加的。 在.NET 3.5中,它存在于System.Core中,因此只需定义您自己的属性,如下所示:

namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class ExtensionAttribute : Attribute { } } 

绝对。 有一些hacky方法,但我正在使用的是从Mono项目中获取System.Core,将其所有代码添加到我自己的解决方案中名为System.Core的新.NET 2.0类库中,并重新编译它。 有一些事情需要解决,例如将他们的MonoTODO属性更改为TODO注释,以及修复AssemblyInfo.cs,但它工作得很好。 我现在在VS 2008中编译的2.0项目中使用LINQ和扩展方法。

假设您获得了Mono源的2.4版本,您应该找到以下代码:

 /mono-2.4/mcs/class/System.Core 

如果你被困在VS 2005中,你可以下载SharpDevelop ,使用针对2.0的目标构建你的System.Core dll,添加对已编译程序集的引用,它可能有效,但我不知道VS 2005是否会有是否存在扩展语法问题。 我想它会给你一些嘴唇。