确定Equals()是否为覆盖?

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

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)); } 

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

 equalsMethod.DeclaringType.Equals(type) 

编辑:清理IsObjectEqualsMethod方法。

如果枚举类型的所有方法都使用BindingFlags.DeclaredOnly,那么您将看不到刚刚inheritance但未被覆盖的方法。