C # - List <T> .Remove () always removes the first object in the list
Working in Visual Studio 2008 (C #) ... I use the List collection to store instances of my custom class (Shift).
I want to remove a specific shift from the list using the Remove method.
But List.Remove () always removes the first item found.
I implemented the IComparable interface for my Shift, I thought that would be enough, then I added an implementation of IEqualityComparer and still has no effect.
Here is an excerpt with my implementation:
Region IComparable Members
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 Members IEqualityComparer
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
, - , "8:00 - 15:00"; "12:00 - 16:00", "" ( "12: 00-16: 00" ) "8:00 - 15:00", !
?
EqualityComparer<T>.Default, , , IEquatable<T>, , .
:
1) Shift IEquatable<T> ( Object.Equals , Shift - Shift : IEquatable<Shift>)
, , :
List<Shift>.Remove("12:00 - 16:00");
"12:00 - 16:00"in this case is the value String, not the actual object Shift. Make sure that in your method, the CompareTocode you use correctly distinguishes the value Stringto the object Shift. Otherwise, when he compares the start time ... everything could work.