我将项目添加到列表框中,如下所示:
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。
我似乎无法理解它。
答案 0 :(得分:3)
我使用Equals
或GetHashCode
方法比较对象所需的c#all list操作。在您的情况下Equals
并且默认实现不会检查属性值,它将仅验证传递的参数对象是否在列表中,因此请考虑您的列表中是否有相同的实例,或者只是两个不同的实例碰巧具有相同的属性。 (有用的VS选项为make object id
,它将使用数字标记实例)
如果是这种情况,那么您应该考虑覆盖Equals
方法,或者找到要用linq
删除的实例,并将该对象传递给Remove
方法。