我需要检查两个MethodInfos之间的相等性。它们实际上是与ReflectedType完全相同的MethodInfo(也就是说,DeclaringType是相同的,并且这些方法实际上应该具有相同的主体)。有很多方法可以做到这一点,但我正在寻找最高效的方法。MethodInfo声明类型的平等
现在我有:
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;
}
这是一种昂贵的,所以我不知道是否有一个更好的办法...
我应该比较两种方法体呢?例如。
first.GetMethodBody() == second.GetMethodBody()
谢谢。
为什么你就不能直接比较,申报类型,而下摆比较反射的类型?我也很想知道为什么你需要这样做。 – jgauffin 2010-11-13 13:59:12
绝对可以比较声明的类型,但它更昂贵,因为它需要调用GetParameters(),而如果ReflectedTypes相等,我可以只进行常规的相等性检查。 – Jeff 2010-11-13 18:12:13
我需要这样做,因为我在运行时创建了由EntityFramework创建的Proxy类,我正在做一些反思。 – Jeff 2010-11-13 18:13:11