0

我有个问题。我有两个与内容具有相同对象的可观察集合。

我使用 observablecollection 从我的数据网格中 grep 一个对象。

datagrid.selecteditem as object

并想从第二个 observable 集合中删除它。行语句看起来像

obscollection.remove(datagrid.selecteditem as object);

对象完全一样,但是当我计算 obscollection 时,对象并没有被删除......

我该如何解决这个问题?请不要问我为什么需要两个内容相同的集合;)

4

1 回答 1

0

当您说“对象完全相同”时,您的意思是它们是等效的,还是它们是相同的实例?我的猜测是它们是等价的,但它们实际上并不是同一个对象实例。ObservableCollection 的 .remove() 方法将寻找引用相等性,因此如果它不是同一个对象实例,它将找不到您正在寻找的对象(因此不会删除它)。

我建议查看有关对象等效性的信息,这篇文章谈到了它,这个答案也是如此(如果你进行搜索,还有更多)。

如果两个集合有等价的对象,但不引用同一个实例,那么有很多简单的解决方案。一种方法是实现 IComparable 接口,或者使用 LINQ 之类的东西在第二个集合中查找等效对象并手动删除它。

希望这可以帮助。

于 2012-07-20T05:04:15.013 回答