代わりに使用できるすべてのアイテムを削除する方法があります。
私は、彼らがClear
代わりのRemoveAll
を使用理由を推測するハザードがあった場合、私はClear
の項目が単純にクリアされているかを示しますながらRemoveAll
は、あなたがコレクションから項目を削除する提案を運ぶので、それが可能だと思います。
これは、通知が発生するCollectionChanged
通知のタイプに違いがあります。 Clear()
はNotifyCollectionChangedAction.Clear
イベントを発生させ、削除されたアイテムはイベントに含めません。Remove
はNotifyCollectionChangedAction.Removed
イベントを発生させ、削除されたアイテムをイベントに渡します。
You cannot raise a CollectionChanged
event with multiple itemsですので、すべてのアイテムを削除してNotifyCollectionChangedAction.Removed
イベントを発生させると例外がスローされます。代わりに、削除されたすべてのアイテムに対してCollectionChanged
イベントを発生させることがあります。これはパフォーマンス上かなり悪い可能性があります。 NotifyCollectionChangedAction.Reset
イベントを発生させるだけで、ユーザーがアイテムを削除するときにRemoved
イベントが発生すると予想されるときに混乱が生じることがあります。
.RemoveAll()
の代わりに.Clear()
を使用することにしました。その名前は実際に何が起こっているのかをよりよく説明しているためです。
Clear()メソッドを見ましたか? (http://msdn.microsoft.com/en-us/library/ms132405.aspx) – Eirik
それはコレクションからすべての要素を削除するClear()メソッドがあります。 – Dante
まあ、RemoveAll()メソッドはコレクションをクリアするためのものではありません。 ListでもClear()メソッドがあります。特定の条件に一致するすべてのアイテムを削除することを意図しています。 –