Если вы производите от чего-то, что уже переопределяет GetHashCode
, я бы реализовал это как:
public override int GetHashCode()
{
unchecked
{
int hash = 37;
hash = hash * 23 + base.GetHashCode();
hash = hash * 23 + Id.GetHashCode();
return hash;
}
}
Нулевое значение Id вернет 0 для Id.GetHashCode ().
Если ваш класс просто наследуется от Object, я бы просто возвратил Id.GetHashCode()
- вы не хотите включить реализацию object.GetHashCode
в ваш хэш-код, поскольку в итоге это становится идентичностью объекта .
Обратите внимание, что ваше определение равенства не будет возвращать true
, если ни один из объектов не имеет идентификатора, но один и тот же хеш-код будет возвращен из обоих объектов. Вы можете рассмотреть возможность изменения реализации Equals.