Dot-Net

為什麼 ObservableCollection 沒有 RemoveAll 方法?

  • May 9, 2018

為什麼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()因為這個名字更好地描述了幕後實際發生的事情。

引用自:https://stackoverflow.com/questions/11688865