下面是一个覆盖Object.Equals()的示例实现,用于应用程序中所有其他实体从中派生的实体基类。实体类的GetHashCode()的正确实现是什么?
所有的实体类都有属性Id,它是一个可为空的int。 (这是无论什么表的实体类对应的主键。)
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
if (base.Equals(obj))
return true;
return Id.HasValue && ((EntityBase) obj).Id.HasValue &&
Id.Value == ((EntityBase) obj).Id.Value;
}
鉴于此实现equals()方法中,你如何正确地实现GetHashCode()方法?
对于记录来说,对于一个ID有一个可为空的int是一个可怕的想法。 ID应该几乎总是GUID,绝对不能为空。 – 2014-08-28 15:52:18