列表框包含找不到项目,无法删除项目

时间:2013-07-18 19:56:50

标签: c# object

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

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。

我似乎无法理解它。

1 个答案:

答案 0 :(得分:3)

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

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