2011-07-24 58 views
2

我想写一个名为IsExtensionMethod方法,它的签名是:如何确定一种方法“是否是类型的扩展方法?”

public bool IsExtensionMethod(object anObject, string method) 
{ 
    // if method was an extension for anObject return true else false 
} 

我该怎么办呢?

我尝试了下面的代码,但在某些情况下,它的返回值是不正确的:

public bool IsExtensionMethod(object anObject, string method) 
{ 
    return anObject.GetType().GetMethods().Where(item => item.Name == method).Count() == 0; 
} 
+0

可能重复(http://stackoverflow.com/questions/721800/using-reflection-to-check-if-a-方法是扩展方法) –

回答

2

编译器增加了CompilerServices.ExtensionAttribute属性扩展方法时,它编译他们。寻找这个属性。 [使用反射来检查一个方法是“扩展方法”]的

http://www.hanselman.com/blog/HowDoExtensionMethodsWorkAndWhyWasANewCLRNotRequired.aspx

+0

你是对的。但我想要有上述的方法。你的副手是在任何加载的程序集中搜索方法。有没有简单的方法? –

+0

@Saeed Afshari,是的,您需要像编译器一样搜索扩展方法。如果这是你需要经常做的事情,你可以做搜索,然后缓存结果。你甚至可以将它作为后期编译过程,并创建一个与dll一样的文件,比如'mylibrary.dll.extensions.xml'或其他等效的文件。 –

相关问题