ObservableCollection 缺少的 AddRange 功能與解決方法
.NET 中的標準 ObservableCollection
不包含用於同時新增多個項目的 AddRange
方法。在處理大型資料集或替換整個集合時,此限制可能會很麻煩。
建立自訂 ObservableRangeCollection
為了解決這個問題,我們可以建立一個自訂 ObservableRangeCollection
類,擴展 ObservableCollection
並合併所需的 AddRange
功能。 以下是如何在 C# 和 VB.NET 中實現此功能:
C# 實作:
<code class="language-csharp">using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; namespace CustomCollections { public class ObservableRangeCollection<T> : ObservableCollection<T> { public void AddRange(IEnumerable<T> collection) { if (collection == null) throw new ArgumentNullException(nameof(collection)); foreach (var item in collection) { Items.Add(item); } OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } } }</code>
VB.NET 實作:
<code class="language-vb.net">Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.ComponentModel Namespace CustomCollections Public Class ObservableRangeCollection(Of T) Inherits ObservableCollection(Of T) Public Sub AddRange(collection As IEnumerable(Of T)) If collection Is Nothing Then Throw New ArgumentNullException(NameOf(collection)) For Each item In collection Items.Add(item) Next OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)) End Sub End Class End Namespace</code>
利用自訂集合:
建立 ObservableRangeCollection
類別後,您可以像標準 ObservableCollection
一樣使用它,但現在新增了 AddRange
方法:
<code class="language-csharp">var myCollection = new ObservableRangeCollection<int>(); myCollection.AddRange(new[] { 1, 2, 3, 4, 5 });</code>
<code class="language-vb.net">Dim myCollection As New ObservableRangeCollection(Of Integer)() myCollection.AddRange({1, 2, 3, 4, 5})</code>
進一步擴充功能
可以透過新增 RemoveRange
、Replace
和 ReplaceRange
等方法進一步增強此自訂集合,以提供更全面的集合管理功能。
以上是為什麼 ObservableCollection 沒有 AddRange 方法,如何加入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!