Potrzebuję sprawdzić równość między dwoma MethodInfos. W rzeczywistości są to dokładnie te same metody MethodInfo, z wyjątkiem ReflectedType (to znaczy, że DeclaringType jest taki sam, a metody powinny w rzeczywistości mieć to samo ciało). Jest na to wiele sposobów, ale szukam najbardziej wydajnego.Równość MethodInfo dla Zgłaszanie typu
Teraz mam:
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;
}
Jest to rodzaj drogie, więc zastanawiam się, czy jest jakiś lepszy sposób ...
powinienem być porównanie dwóch metod zamiast ciał? na przykład.
Dzięki.
Dlaczego nie można po prostu porównać typy deklarujących bezpośrednio bez porównywania rąbka do odbitych typów? Chciałbym również wiedzieć, dlaczego tak się dzieje. – jgauffin
Zdecydowanie można porównać typy deklarujące, ale jest to droższe, ponieważ wymaga to wywołania metody GetParameters(), natomiast jeśli typy ReflectedTypes są równe, mogę po prostu wykonać regularną kontrolę równości. – Jeff
Muszę to zrobić, ponieważ mam klasy Proxy utworzone przez EntityFramework w czasie wykonywania, nad którym zastanawiam się. – Jeff