作为我的应用程序的一部分,我有一个接收 MethodInfo 的函数,需要根据该方法是否为“扩展方法”对其进行特定操作。
我检查了 MethodInfo 类,但找不到任何显示该方法是扩展的IsExtension属性或标志。
有谁知道我如何从方法的 MethodInfo 中找到它?
作为我的应用程序的一部分,我有一个接收 MethodInfo 的函数,需要根据该方法是否为“扩展方法”对其进行特定操作。
我检查了 MethodInfo 类,但找不到任何显示该方法是扩展的IsExtension属性或标志。
有谁知道我如何从方法的 MethodInfo 中找到它?
您可以在 MethodInfo 实例上调用IsDefined方法,通过检查ExtensionAttribute是否应用于该方法来找出这一点:
bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);
基于
编译后的表单上似乎有一个属性。所以看看方法是否有这个属性:
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx
这看起来与之前的问题非常相似,可能值得一看。那里的建议是寻找具有ExtensionAttribute的类和方法,这听起来像你所追求的。
如果您知道您正在MethodInfo
从实例中获取 a,则可以轻松检查该方法是否是静态的。扩展方法只是语法糖,并被转换为在实例中传递的静态方法调用。
编译器不会在编译时将所有扩展方法切换为静态方法调用吗?
myList.First();
变成
Enumerable.First(myList);
如果是这种情况,那么 .net 运行时(您正在反射的地方)中没有扩展方法。