プロパティ A、B、C、D、StartDate、EndDate を持つオブジェクトの場合、A、B、C が同一で日付範囲が重複している場合に 2 つのオブジェクトが等しいものを実装したい場合、どうすればよいでしょうか?
私はそのように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 を実装するときに、日付を無視せずに HashCode を同じにする方法がわかりません。
もう少し具体的にすると、これはプロジェクト管理とレートに関係しています。同じ役割の同じプロジェクトの同じ人物が、同じ期間に異なる料金を請求できないというビジネス ルールを実装したいと考えています。したがって、Project DeathMarch で DBA の役割を果たしている Bob は、自分の時間を記録するために、任意の時点で 1 つの有効な請求レートしか持つことができません。彼が同じ期間に別のレートで QA アナリストの役割で数時間を記録する必要がある場合は、問題ありません。これは大規模な既存システムであるため、ドメイン オブジェクト構造を変更することはできません。