Kon*_*ski 5 .net c# equality generic-list iequalitycomparer
在Visual Studio 2008中工作(C#)...我使用List集合来存储我的自定义类(Shift)的实例.
我想使用Remove方法从列表中删除某个班次.
但List.Remove()总是删除它找到的第一个项目.
我为我的Shift实现了IComparable接口,我认为这就够了,然后我添加了IEqualityComparer的实现,它仍然没有效果.
以下是我的实施摘录:
地区IComparable会员
Run Code Online (Sandbox Code Playgroud)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成员
Run Code Online (Sandbox Code Playgroud)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"被删除,后者仍然留在集合中!
这有什么不对?谢谢
Rex*_*x M 10
你可以覆盖object.GetHashCode和object.Equals:
public override bool Equals(object obj)
{
if(obj == null)
{
return false;
}
return Equals(this, obj as Shift);
}
public override int GetHashCode()
{
return this.GetHashCode(this);
}
Run Code Online (Sandbox Code Playgroud)
您也应该进行空值检查Equals(x, y).
| 归档时间: |
|
| 查看次数: |
5916 次 |
| 最近记录: |