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