Работа в Visual Studio 2008 (C #) ...
Я использую коллекцию List для хранения экземпляров моего пользовательского класса (Shift).
Я хочу удалить определенный сдвиг из списка с помощью метода Remove.
Но List.Remove () всегда удаляет первый найденный элемент.
Я реализовал интерфейс IComparable для своего Shift, я подумал, что этого будет достаточно, затем я добавил реализацию IEqualityComparer, и она все еще не действует.
Вот выдержка из моей реализации:
регион 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
регион Пользователи 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», вызов Remove («12: 00-16: 00») приводит к удалению «8:00 - 15:00», а последний остается в коллекции!
Что здесь не так? Thx