c# - Usando la reflexión para verificar si un método es "Método de Extensión"
reflection extension-methods (5)
¿El compilador no cambia todos los métodos de extensión a llamadas de método estático en tiempo de compilación?
myList.First();
se convierte en
Enumerable.First(myList);
Si este es el caso, entonces no hay métodos de extensión en el tiempo de ejecución de .net (donde se refleja).
Como parte de mi aplicación, tengo una función que recibe un MethodInfo y necesito hacer operaciones específicas en ella, dependiendo de si ese método es "Método de extensión".
Revisé la clase MethodInfo y no pude encontrar ninguna propiedad o indicador de IsExtension que muestre que el método es una extensión.
¿Alguien sabe cómo puedo encontrar eso en MethodInfo del método?
Esto parece muy similar a una question anterior, podría valer la pena echarle un vistazo. La sugerencia era buscar clases y métodos con el http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx que suena como lo que estás buscando.
Puede llamar al método IsDefined en la instancia de MethodInfo para averiguarlo comprobando si el atributo de extensión se aplica al método:
bool isExtension=someMethod.IsDefined(typeof(ExtensionAttribute),true);
Residencia en
Métodos de extensión F # en C #
Parece que hay un atributo en la forma compilada. Así que mira si el método tiene este atributo:
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.extensionattribute.aspx
Si sabe que está obteniendo un MethodInfo
de una instancia, puede verificar fácilmente si el método es estático. Los métodos de extensión son solo azúcar sintáctica y se transforman en llamadas estáticas de método que pasan en la instancia.