我需要检查两个MethodInfo之间的相等性。它们实际上是完全相同的MethodInfo,但ReflectedType除外(也就是说,DeclaringType是相同的,并且方法实际上应具有相同的主体)。有很多方法可以做到这一点,但是我正在寻找最有效的方法。
现在我有:
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()
谢谢。
最佳答案
我想我会将答案留给问题...
需要注意的一件事:
first.GetMethodBody() == second.GetMethodBody()
不起作用...所以到目前为止我发现的唯一答案是:
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;
}
关于c# - 声明类型的MethodInfo相等性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4168489/