Pour un objet avec les propriétés A, B, C, D, StartDate et EndDate si je voulais implémenter quelque chose où deux objets sont égaux s'ils ont A, B et C identiques et qui se chevauchent date, comment cela serait-il fait?Equals, GetHashCode, EqualityComparers et égalité floue
J'ai essayé de créer un EqualityComparer comme si
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;
}
Mais il semble beaucoup d'endroits dans le cadre et l'utilisation Equals ignorer GetHashCode et la documentation n'est pas claire du tout. Quand je vais implémenter GetHashCode je ne sais pas comment rendre les HashCodes identiques sans ignorer les dates. Pour le rendre un peu plus concret, cela a à voir avec la gestion de projet et les tarifs. Je veux implémenter une règle métier que la même personne sur le même projet dans le même rôle ne peut pas avoir des taux différents pendant la même période. Donc Bob sur Project DeathMarch dans le rôle de DBA ne peut avoir qu'un seul taux de facturation effectif à un moment donné pour enregistrer son temps. S'il avait besoin de se connecter quelques heures dans le rôle d'analyste QA à un rythme différent pendant la même période, c'est OK. C'est un système pré-existant massif donc la modification de la structure de l'objet domaine n'est pas une option.
Vous pouvez définir votre propre 'IsInConflictWith' type de méthode et faire un test de n^2.Une meilleure solution est de tout avoir dans une seule méthode 'DetectConflicts' qui les ordonne par' StartDate' et vérifie ensuite les chevauchements avec un seul passage. –