1

我将项目添加到列表框中,如下所示:

foreach(myObject object in ListOfObjects)
{
    mylistbox1.add(object);
}

foreach(myObject object in ListOfObjectsTwo)
{
    mylistbox2.add(object);
}

此外,我想在特定条件下删除几个项目。这就是我所做的:

foreach(myObject object in ListOfObjects3)
{
    mylistbox1.items.remove(object);
    mylistbox2.items.remove(object);
}

这似乎只适用于mylistbox1但不是mylistbox2。当我调试时,我可以看到该项目在那里,并且它具有与我要删除的项目完全相同的属性。当我尝试检查列表框是否包含我试图删除的项目时,它返回 false。

我似乎无法理解它。

4

1 回答 1

3

我 c# all 列出了以某种方式比较对象使用EqualsGetHashCode方法所需的操作。在您的情况下Equals,默认实现不会检查属性值,它只会验证传递的参数对象是否在列表中,因此请考虑您的列表中是否有相同的实例,或者只是碰巧具有相同属性的两个不同实例。(有用的 VS 选项是make object id它会用数字标记实例)

如果是这种情况,那么您应该考虑覆盖Equals方法或找到要删除的实例,linq例如并将该对象传递给Remove方法。

于 2013-07-18T20:04:49.823 回答