首頁 >後端開發 >C++ >為什麼 ObservableCollection 沒有 AddRange 方法,如何加入?

為什麼 ObservableCollection 沒有 AddRange 方法,如何加入?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-20 07:07:12962瀏覽

Why Doesn't ObservableCollection Have an AddRange Method, and How Can I Add One?

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>

進一步擴充功能

可以透過新增 RemoveRangeReplaceReplaceRange 等方法進一步增強此自訂集合,以提供更全面的集合管理功能。

以上是為什麼 ObservableCollection 沒有 AddRange 方法,如何加入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn