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
.Чтобы определить, объявлено ли переопределение для самого типа, вы можете изменить условие на
equalsMethod.DeclaringType.Equals(type)
РЕДАКТИРОВАТЬ: Очистил метод IsObjectEqualsMethod
.