确定Equals()是否为覆盖?

lan*_*nce 3 c# testing reflection overriding equals

我有一个Type(type)的实例.如何确定它是否覆盖Equals()?

Ani*_*Ani 6

private static bool IsObjectEqualsMethod(MethodInfo m)
{
    return m.Name == "Equals"
        && m.GetBaseDefinition().DeclaringType.Equals(typeof(object));
}

public static bool OverridesEqualsMethod(this Type type)
{
    var equalsMethod = type.GetMethods()
                           .Single(IsObjectEqualsMethod);

    return !equalsMethod.DeclaringType.Equals(typeof(object));
}
Run Code Online (Sandbox Code Playgroud)

请注意,这表明是否object.Equals已在继承层次结构中的任何位置重写type.要确定是否在类型本身上声明了覆盖,可以将条件更改为

equalsMethod.DeclaringType.Equals(type)
Run Code Online (Sandbox Code Playgroud)

编辑:清理IsObjectEqualsMethod方法.