为什么ObservableCollection
没有RemoveAll
方法like List
?为什么ObservableCollection没有RemoveAll方法?
我已经实现了扩展方法来提供这种功能的ObservableCollection
,但我想了解是否有不提供这种功能的具体原因。
会不会影响数据绑定由于收藏变更? This后确实指定了几个可能会出错,但使用ObservableCollections
,但没有解决这个问题。
为什么ObservableCollection
没有RemoveAll
方法like List
?为什么ObservableCollection没有RemoveAll方法?
我已经实现了扩展方法来提供这种功能的ObservableCollection
,但我想了解是否有不提供这种功能的具体原因。
会不会影响数据绑定由于收藏变更? This后确实指定了几个可能会出错,但使用ObservableCollections
,但没有解决这个问题。
它确实有一个Clear()
方法,它可以删除所有可替代使用的项目。
如果让我猜的话,为什么他们使用Clear
代替RemoveAll
,我觉得这是因为RemoveAll
携带你是从集合删除项目的建议,同时Clear
告诉你的项目只是被清除。
这使得CollectionChanged
通知被引发的类型有所不同。 Clear()
产生了一个NotifyCollectionChangedAction.Clear
事件,并且不包括事件中的移除项目,而Remove
产生了一个NotifyCollectionChangedAction.Removed
事件,并将移除的项目传递给事件。
You cannot raise a CollectionChanged
event with multiple items,因此如果在删除所有项目的情况下发生NotifyCollectionChangedAction.Removed
事件将会引发异常。另一种方法是为每个删除的项目添加一个CollectionChanged
事件,这对于性能可能非常不利。如果用户期望在移除项目时发生Removed
事件,则简单地提起NotifyCollectionChangedAction.Reset
事件会导致一些混淆。
所以我猜他们决定简单地使用.Clear()
而不是.RemoveAll()
,因为这个名字能够更好地描述幕后实际发生的事情。
我认为这解释了它。感谢这样的详细解释。 – 2012-07-30 07:24:39
你可能会问为什么它不执行Reverse
或任何其他方法。根本没有理由实施超过最常见和绝对必要的方法。除了Add
和Remove
之外的所有内容都很方便。 (RemoveAll
甚至不是列表工具的常用接口的一部分,而且它们的确有很多方法)
你看过Clear()方法吗? (http://msdn.microsoft.com/en-us/library/ms132405.aspx) – Eirik 2012-07-27 13:44:02
它有方法Clear(),它从集合中删除所有元素。 – Dante 2012-07-27 13:44:52
那么,RemoveAll()方法不是为了清除集合。即使列表有一个Clear()方法。它旨在删除符合特定条件的所有项目。 – 2012-07-27 13:48:07