Travailler dans Visual Studio 2008 (C#) ... J'utilise une collection de listes pour stocker des instances de ma classe personnalisée (Maj).C# - Liste <T> .Remove() supprime toujours le premier objet de la liste.
Je souhaite supprimer un certain décalage de la liste en utilisant la méthode Remove. Mais List.Remove() supprime toujours le premier élément qu'il trouve.
J'ai implémenté l'interface IComparable pour mon Shift, j'ai pensé que ce serait suffisant, puis j'ai ajouté une implémentation de IEqualityComparer, et cela n'a toujours aucun effet.
est ici l'extrait avec ma mise en œuvre:
région IComparable Membres
public int CompareTo(object obj) { Shift s1 = this; Shift s2 = (Shift)obj; if (s1.start.time != s2.start.time) return s1.start.CompareTo(s2.start); else return s1.end.CompareTo(s2.end); }
endregion
région IEqualityComparer Membres
public bool Equals(Shift x, Shift y) { if ((x.opening) != (y.opening)) return false; if ((x.closing) != (y.closing)) return false; if (!x.opening) if (x._start != y._start) return false; if (!x.closing) if (x._end != y._end) return false; if (x.when != y.when) return false; if (x.day != y.day) return false; if (x.EmployeeID != y.EmployeeID) return false; return true; } public int GetHashCode(Shift obj) { return obj.ToString().ToLower().GetHashCode(); }
endregion
Et pourtant, encore - quand la liste contient deux équipes, dites "8:00 - 15:00"; "12:00 - 16:00", l'appel de Remove ("12: 00-16: 00") se traduit par "8:00 - 15:00" se retirer, et le dernier reste dans la collection!
Quel est le problème ici? Thx
Vous devriez aussi retourner false si obj.GetType()! = GetType(), sinon vous risquez de faire des contrôles d'égalité contre les sous-classes qui peuvent avoir des algorithmes plus raffinés. –
-1, Il n'a pas surchargé object.GetHashCode(), il a implémenté IEqualityComparer .GetHashCode (T). –
@csharptest bon endroit, merci –