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

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

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

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

基于

C#中的F#扩展方法

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

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

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

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

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

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

编译器编译器是否将所有扩展方法切换为静态方法调用?

 myList.First(); 

 Enumerable.First(myList); 

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