使用反射检查方法是否为“扩展方法”

时间:2009-04-06 14:47:31

标签: c# reflection extension-methods methodinfo

作为我的应用程序的一部分,我有一个接收MethodInfo的函数,需要对它进行特定操作,具体取决于该方法是否为“扩展方法”。

我检查了MethodInfo类,但找不到任何 IsExtension 属性或标志,表明该方法是扩展名。

有谁知道如何从方法的MethodInfo中找到它?

5 个答案:

答案 0 :(得分:22)

您可以通过检查 ExtensionAttribute 是否应用于该方法来调用MethodInfo实例上的 IsDefined 方法来查找此内容:

bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);

答案 1 :(得分:18)

基于

F# extension methods in C#

似乎编译表单上有一个属性。那么看看该方法是否具有此属性:

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx

答案 2 :(得分:3)

这看起来与之前的question非常相似,可能值得一看。有人建议用ExtensionAttribute寻找类似于你所追求的类和方法。

答案 3 :(得分:1)

如果您知道从实例获得MethodInfo,则可以轻松检查该方法是否为静态。扩展方法只是语法糖,并转换为在实例中传递的静态方法调用。

答案 4 :(得分:0)

编译器不能在编译时将所有扩展方法切换为静态方法调用吗?

myList.First();

变为

Enumerable.First(myList);

如果是这种情况,那么.net运行时(您要反映的地方)中没有扩展方法。