对于具有属性 A、B、C、D、StartDate 和 EndDate 的对象,如果我想实现任何两个对象相等的东西,如果它们具有相同的 A、B 和 C 以及重叠的日期范围,那该怎么做?
我试过像这样创建一个 EqualityComparer
public override bool Equals(RateItem x, RateItem y)
{
bool equal = true;
if ((x.A != y.A || x.B != y.B || x.C != y.C ||
(x.StartDate < y.StartDate && x.EndDate <= y.StartDate) ||
(x.StartDate > y.StartDate && y.EndDate <= x.StartDate)))
{ equal = false; }
return equal;
}
但是框架中的很多地方似乎都忽略了 Equals 并使用了 GetHashCode ,并且文档对此根本不清楚。当我去实现 GetHashCode 时,我不知道如何在不忽略日期的情况下使 HashCodes 变得相同。
为了使它更具体一点,这与项目管理和费率有关。我想实施一个业务规则,即同一项目中同一角色的同一个人在同一时间段内不能有不同的费率。因此,在 Project DeathMarch 中担任 DBA 角色的 Bob 在任何给定时间只能有一个有效的账单费率来记录他的时间。如果他需要在同一时间段内以不同的速度在 QA 分析师的角色中记录几个小时,那没关系。这是一个庞大的预先存在的系统,因此更改域对象结构不是一种选择。