为什么ObservableCollection
没有像List
一样拥有RemoveAll
方法?
我已经实现了一个扩展方法来为ObservableCollection
提供这个功能,但我想知道是否有特定的原因不提供这个功能。
这可能会影响数据绑定吗,因为集合变化?这篇文章确实指出了在使用ObservableCollections
时可能出现的一些问题,但并没有回答这个问题。
为什么ObservableCollection
没有像List
一样拥有RemoveAll
方法?
我已经实现了一个扩展方法来为ObservableCollection
提供这个功能,但我想知道是否有特定的原因不提供这个功能。
这可能会影响数据绑定吗,因为集合变化?这篇文章确实指出了在使用ObservableCollections
时可能出现的一些问题,但并没有回答这个问题。
它确实有一个Clear()
方法,可以删除所有项目。
如果我猜测为什么他们使用 Clear
而不是 RemoveAll
,我想这是因为RemoveAll
会暗示您正在从集合中删除项目,而Clear
则告诉您这些项目被清除了。
这会影响到引发的 CollectionChanged
通知类型。 Clear()
引发一个 NotifyCollectionChangedAction.Reset
事件,并且不包括在事件中删除的项,而 Remove
引发一个 NotifyCollectionChangedAction.Removed
事件,并将已删除的项传递给该事件。
您无法引发具有多个项的 CollectionChanged
事件,因此使用NotifyCollectionChangedAction.Removed
事件引发所有已删除项目将抛出异常。另一种选择是为每个删除的项目引发一个 CollectionChanged
事件,但这可能会对性能造成很大的负载。简单地引发一个 NotifyCollectionChangedAction.Reset
事件会导致用户在删除项目时期望发生 Removed
事件而感到困惑。
因此,我猜他们决定仅使用.Clear()
而不是 .RemoveAll()
,因为名称更好地描述了实际发生的情况。
Reverse
或任何其他方法。没有理由实现超过最常见和绝对必要的方法。除了Add
和Remove
之外的所有内容都只是方便之举。(RemoveAll
甚至不是列表实现的常见接口的一部分,而它们已经有很多方法了)