17

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

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

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

4

5 回答 5

24

您可以在 MethodInfo 实例上调用IsDefined方法,通过检查ExtensionAttribute是否应用于该方法来找出这一点:

bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);
于 2009-04-06T14:57:05.357 回答
19

基于

C# 中的 F# 扩展方法

编译后的表单上似乎有一个属性。所以看看方法是否有这个属性:

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

于 2009-04-06T14:51:57.723 回答
3

这看起来与之前的问题非常相似,可能值得一看。那里的建议是寻找具有ExtensionAttribute的类和方法,这听起来像你所追求的。

于 2009-04-06T14:53:21.447 回答
1

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

于 2009-04-06T14:50:50.907 回答
0

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

myList.First();

变成

Enumerable.First(myList);

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

于 2009-04-06T14:51:04.667 回答