Arbeiten in Visual Studio 2008 (C#) ... ich eine Liste Sammlung verwende Instanzen meiner benutzerdefinierten Klasse zu speichern (Shift).C# - Liste <T> .Remove() löscht immer das erste Objekt auf der Liste
Ich möchte eine bestimmte Verschiebung aus der Liste löschen, indem Sie die Remove-Methode verwenden.
Aber List.Remove() löscht immer das erste Element, das es findet.
Ich habe die IComparable-Schnittstelle für meine Schicht implementiert, ich dachte, das wäre genug, dann habe ich eine Implementierung von IEqualityComparer hinzugefügt, und es hat immer noch keinen Effekt.
Hier ist der Auszug mit meiner Implementierung:
Region IComparable Mitglieder
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
Region IEqualityComparer Mitglieder
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
Und dennoch, wenn die Liste zwei Schichten enthält, sagen Sie "8:00 - 15:00"; "12:00 - 16:00" ruft "Entfernen" ("12: 00-16: 00") auf "8:00 - 15:00" wird entfernt, und letzteres bleibt in der Sammlung!
Was ist hier falsch? Thx
Sie sollten auch false zurückgeben, wenn obj.GetType()! = GetType(), andernfalls riskieren Sie, Gleichheitsprüfungen gegen Unterklassen, die verfeinerte Algorithmen haben können. –
-1, Er überladen object.GetHashCode() nicht, er implementiert IEqualityComparer. GetHashCode (T). –
@csharptest good spot, danke –