c# reflection extension-methods methodinfo

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?



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);



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.