【发布时间】:2010-10-05 05:17:30
【问题描述】:
下面是一个为应用程序中的所有其他实体派生的实体基类重写 Object.Equals() 的示例实现。
所有实体类都有属性 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,并且绝对不能为空。