gpt4 book ai didi

c# - 等于、GetHashCode、EqualityComparers 和模糊相等

转载 作者:行者123 更新时间:2023-11-30 15:10:33 25 4
gpt4 key购买 nike

对于具有属性 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 结果相同。

为了更具体一点,这与项目管理和费率有关。我想实现一个业务规则,即在同一项目中担任同一角色的同一个人在同一时间段内不能有不同的费率。因此,Bob 在 Project DeathMarch 中担任 DBA 角色,在任何给定时间只能使用一个有效账单率来记录他的时间。如果他需要在同一时间段内以不同的速度记录 QA 分析师角色中的几个小时,那是可以的。这是一个庞大的预先存在的系统,因此无法更改域对象结构。

最佳答案

这是不可能的。

.Net 中的相等性必须是可传递的,这意味着如果 a == bb == c,则 a == c .

关于c# - 等于、GetHashCode、EqualityComparers 和模糊相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com