为什么ObservableCollection
没有RemoveAll
像 a 这样的方法List
?
我已经实现了一个扩展方法来提供这个功能ObservableCollection
,但我想了解是否有特定的原因不提供这个功能。
由于Collection 更改,它可能会以某种方式影响Data Binding吗?这篇文章确实指定了一些在使用时可能出错的事情,但没有解决这个问题。ObservableCollections
为什么ObservableCollection
没有RemoveAll
像 a 这样的方法List
?
我已经实现了一个扩展方法来提供这个功能ObservableCollection
,但我想了解是否有特定的原因不提供这个功能。
由于Collection 更改,它可能会以某种方式影响Data Binding吗?这篇文章确实指定了一些在使用时可能出错的事情,但没有解决这个问题。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
甚至不是列表实现的通用接口的一部分,而且它们确实已经有很多方法)