在Visual Studio 2008下 我可以创建一个扩展方法在.NET Framework 2.0项目下工作吗?
答案 0 :(得分:10)
有一个ugly hack可以在.Net 2.0中使用扩展方法;但最好将框架升级到3.5。
简而言之(来自链接#2):扩展方法只是使用[Extension]属性标记的普通静态方法。这个属性实际上只是由幕后的编译器添加的。在.NET 3.5中,它存在于System.Core中,因此只需定义您自己的属性:
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class ExtensionAttribute : Attribute
{
}
}
答案 1 :(得分:2)
绝对。有一些hacky方法,但我正在使用的是从Mono project获取System.Core,将其所有代码添加到我自己的解决方案中名为System.Core的新.NET 2.0类库中,并重新编译它。有一些事情需要解决,例如将他们的MonoTODO属性更改为TODO注释,以及修复AssemblyInfo.cs,但它工作得很好。我现在在VS 2008中编译的2.0项目中使用LINQ和扩展方法。
假设您获得了Mono源的2.4版本,您应该找到以下代码:
<extracted directory>/mono-2.4/mcs/class/System.Core
如果您遇到VS 2005,可以下载SharpDevelop,使用针对2.0的目标构建您的System.Core dll,添加对已编译程序集的引用,它可能会有效,但我不知道知道VS 2005是否会出现扩展语法问题。我想它会给你一些嘴唇。