2011-05-15 61 views
6

有没有人曾试图在.NET 4.0下使用System.CodeDom生成扩展方法?似乎没有任何方式将CodeMemberMethod或CodeParameterDeclarationExpression指定为扩展方法/参数。使用System.CodeDom生成扩展方法

如果这是不可能的,有没有什么好的解决方法?

感谢

回答

6

显然CodeDom中是无法生成扩展方法的第一个参数正确的代码,但你可以欺骗它是这样的:

var param = new CodeParameterDeclarationExpression("this string", "s"); 

它会幸福地忽略了一个事实,“这字符串“不是有效的类型...

+0

呵呵。简单FTW – sehe 2011-05-15 22:29:06

+0

这实际上很适合我的需求。我使用扩展方法的语法原因,没有更多的,所以没有成员的“这个”参数将永远不会被访问,所以我甚至不必担心在System.CodeDom中的任何类型检查...感谢您的想法 – LorenVS 2011-05-15 23:27:40

0

Extension Attribute

报价:

在Visual Basic中,你应该使用这个属性来创建一个扩展方法。有关更多信息,请参见扩展方法(Visual Basic)。

在C#中,您不需要使用此属性;你应该使用这个(C#引用)修饰符作为第一个参数来创建一个扩展方法。编译器自动为扩展方法发出ExtensionAttribute。有关更多信息,请参阅扩展方法(C#编程指南)。

如果您正在编写一个支持扩展方法的编译器,那么您的编译器应该在每个扩展方法以及包含一个或多个扩展方法的每个类和程序集上发出该属性。

+1

它只会将ExtensionAttribute应用于该方法,这是C#中的错误...编译器说要使用”this“修饰符代替 – 2011-05-15 22:20:46

+0

您是否尝试使用编译器或反射发射?我可能误解了你的问题,如果你是指某种in-IDE脚本/插件,也就是说,你可能会考虑使用[Compiler As A Service](http://weblogs.asp.net/britchie/archive/2010/08/08-c-compiler-as-a-service.aspx),无论如何 – sehe 2011-05-15 22:27:02

+1

我正在使用System.CodeDom,它是标准.NET框架中包含的用于生成代码文件(或程序集)的库。 – LorenVS 2011-05-15 23:26:44