Necesito verificar la igualdad entre dos MethodInfos. En realidad, son exactamente las mismas MethodInfo a excepción del ReflectedType (es decir, el DeclaringType es el mismo y los métodos deberían tener el mismo cuerpo). Hay varias maneras de hacerlo, pero estoy buscando la más eficiente.MethodInfo Igualdad para declarar el tipo
Ahora mismo tengo:
public static bool AreMethodsEqualForDeclaringType(this MethodInfo first, MethodInfo second)
{
first = first.ReflectedType == first.DeclaringType ? first : first.DeclaringType.GetMethod(first.Name, first.GetParameters().Select(p => p.ParameterType).ToArray());
second = second.ReflectedType == second.DeclaringType ? second : second.DeclaringType.GetMethod(second.Name, second.GetParameters().Select(p => p.ParameterType).ToArray());
return first == second;
}
Esto es un poco caro, así que me estoy preguntando si hay una manera mejor ...
¿Debería la comparación de los dos cuerpos de los métodos en su lugar? p.ej.
first.GetMethodBody() == second.GetMethodBody()
Thanks.
por qué no puedes simplemente comparar los tipos declaración directa sin comparar dobladillo a los tipos reflejados? También me interesa saber por qué lo necesitas así que esto. – jgauffin
Definitivamente podría simplemente comparar los tipos que declaran, pero es más costoso porque eso requiere llamar a GetParameters(), mientras que, si los ReflectedTypes son iguales, puedo hacer una comprobación de igualdad regular. – Jeff
Necesito hacer esto porque tengo clases Proxy creadas por EntityFramework en el tiempo de ejecución que estoy haciendo una reflexión sobre. – Jeff