为什么ObservableCollection没有RemoveAll方法?

Sha*_*ngh 11 .net wpf observablecollection

为什么ObservableCollection没有这样的RemoveAll方法List

我已经实现了一个扩展方法来提供此功能ObservableCollection,但我想了解是否有特定原因不提供此功能.

由于Collection更改,它是否可能以某种方式影响数据绑定这篇文章确实指出了一些在使用时可能出错的事情,但没有解决这个问题.ObservableCollections

Rac*_*hel 22

它确实有一个Clear()删除所有可以使用的项目的方法.

如果我不得不冒险猜测他们为什么使用Clear而不是RemoveAll,我认为这是因为RemoveAll带有你从集合中删除物品的建议,同时Clear告诉你这些物品只是被清除了.

CollectionChanged会对引发的通知类型产生影响.Clear()引发NotifyCollectionChangedAction.Reset事件并且不包括事件中已删除的项目,同时Remove引发NotifyCollectionChangedAction.Removed事件,并将删除的项目传递给事件.

您不能CollectionChanged使用多个项目引发事件,因此NotifyCollectionChangedAction.Removed在删除所有项目的情况下引发事件会引发异常.另一种方法是CollectionChanged为每个被移除的项目引发一个事件,这对性能来说可能非常糟糕.NotifyCollectionChangedAction.Reset当用户期望Removed在删除项目时发生事件时,简单地引发事件会引起一些混乱.

所以我猜他们决定简单地使用.Clear()而不是.RemoveAll()因为这个名字更好地描述了幕后实际发生的事情.