爲什麼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