我需要检查两个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/

10-13 03:38