[英]Using reflection to check if a method is "Extension Method"
作为我的应用程序的一部分,我有一个接收 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
,则可以轻松检查该方法是否是静态的。 扩展方法只是语法糖,并转换为传入实例的静态方法调用。
编译器不会在编译时将所有扩展方法切换为静态方法调用吗?
myList.First();
变成
Enumerable.First(myList);
如果是这种情况,则 .net 运行时(您正在反射的地方)中没有扩展方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.