У меня есть несколько объектов с кучей полей, и мне приходится реализовывать GetHashCode и Equals.Больно обходить каждое поле вручную, поэтому я написал их так:
public override int GetHashCode()
{
int hash = 17;
foreach (PropertyInfo p in GetType().GetProperties())
{
hash = hash * 23 + p.GetValue(this, null).GetHashCode();
}
return hash;
}
public override bool Equals(object obj)
{
foreach (PropertyInfo p in GetType().GetProperties())
{
if (p.GetValue(obj, null) != p.GetValue(this, null))
return false;
}
return true;
}
Кроме соображений скорости, почему бы мне не реализовать их так?