7

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

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

谢谢

4

2 回答 2

7

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

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

它会很高兴地忽略“这个字符串”不是有效类型的事实......

于 2011-05-15T22:23:35.963 回答
0

请参阅扩展属性

引用:

在 Visual Basic 中,您应该使用此属性来创建扩展方法。有关详细信息,请参阅扩展方法 (Visual Basic)。

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

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

于 2011-05-15T21:35:05.207 回答