使用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运行时(您要反映的地方)中没有扩展方法。