我需要檢查兩個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