Trabajando en Visual Studio 2008 (C#) ... Utilizo una colección de lista para almacenar instancias de mi clase personalizada (Shift).C# - Lista <T> .Remove() siempre elimina el primer objeto en la lista
Quiero eliminar un cierto turno de la lista usando el método Eliminar.
Pero List.Remove() siempre borra el primer elemento que encuentra.
Implementé la interfaz IComparable para mi Shift, pensé que esto sería suficiente, luego agregué una implementación de IEqualityComparer, y todavía no tiene ningún efecto.
Este es el pasaje con mi aplicación:
región Miembros IComparable
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
región IEqualityComparer miembros
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
Y, sin embargo, aún - cuando la Lista contiene dos turnos, diga "8:00 - 15:00"; "12:00 - 16:00", llamando a Eliminar ("12: 00-16: 00") los resultados en "8:00 - 15:00" se eliminan, y el último permanece en la colección!
¿Qué pasa aquí? Thx
También debe devolver false si obj.GetType()! = GetType(), de lo contrario corre el riesgo de realizar comprobaciones de igualdad contra subclases que pueden tener algoritmos más refinados. –
-1, no sobrecargó object.GetHashCode(), implementó IEqualityComparer .GetHashCode (T). –
@csharptest buen lugar, gracias –