gpt4 book ai didi

C# - List.Remove() 总是删除列表中的第一个对象

转载 作者:太空狗 更新时间:2023-10-29 22:18:05 25 4
gpt4 key购买 nike

在 Visual Studio 2008 (C#) 中工作...我使用 List 集合来存储自定义类 (Shift) 的实例。

我想使用 Remove 方法从列表中删除某个类次。

但是 List.Remove() 总是删除它找到的第一个项目。

我已经为我的 Shift 实现了 IComparable 接口(interface),我认为这就足够了,然后我添加了一个 IEqualityComparer 的实现,但它仍然没有效果。

这是我的实现摘录:

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 IEqualityComparer Members

    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"被删除,而后者保留在集合中!

这是怎么回事?谢谢

最佳答案

您可以覆盖 object.GetHashCodeobject.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);
}

您可能还应该在 Equals(x, y) 中进行空检查。

关于C# - List<T>.Remove() 总是删除列表中的第一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com