Visual Studio 2008 (C#) での作業... List コレクションを使用して、カスタム クラス (Shift) のインスタンスを格納します。
Remove メソッドを使用して、特定のシフトをリストから削除したいと考えています。
ただし、 List.Remove() は常に最初に見つかったアイテムを削除します。
Shift に IComparable インターフェイスを実装しました。これで十分だと思い、IEqualityComparer の実装を追加しましたが、まだ効果がありません。
これが私の実装の抜粋です。
リージョンI比較メンバー
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); }
エンドリージョン
regionIEqualityComparer メンバー
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(); }
エンドリージョン
それでも、リストに 2 つのシフトが含まれている場合は、「8:00 - 15:00」と言います。"12:00 - 16:00"、Remove("12:00-16:00") を呼び出すと、"8:00 - 15:00" が削除され、後者はコレクションに残ります!
ここで何が問題なのですか?どうも