垃圾。我发现了这个问题。没关系。当项目被移除时,它应该被替换为另一个项目,但在替换之前可能会发生一个事件,由于尚未进行替换,因此触发了删除错误项目的事件。
两种方式,断言都失败了:
var item4 = listBox.Items[4];
var item5 = listBox.Items[5];
listBox.Items.Remove(item5);
Debug.Assert(listBox.Items.Contains(item4), "item4 not found");
Debug.Assert(!listBox.Items.Contains(item5), "item5 still found");
和
var item4 = listBox.Items[4];
var item5 = listBox.Items[5];
listBox.Items.RemoveAt(5);
Debug.Assert(listBox.Items.Contains(item4), "item4 not found");
Debug.Assert(!listBox.Items.Contains(item5), "item5 still found");
ListBox项是自定义类。 ListBox是所有者绘制的。
断言item4 != item5
通过。
答案 0 :(得分:2)
ListBox项目是自定义类。
如果你覆盖了GetHashCode和Equals方法,那么Remove可能会发现item4和item5确实相同,因此删除item4而不是item5,因为这是它找到的第一个。
尝试两次。如果两个项目都被删除,那么很可能就是这种情况。同时尝试断言item4.Equals(item5)而不是item4 == item5。
答案 1 :(得分:0)
从列表框中删除项目时,会重新编制列表框索引。项目[6]成为项目[5]。