Kefungsian AddRange yang Hilang dan Penyelesaian ObservableCollection
Standard ObservableCollection
dalam .NET tidak termasuk kaedah AddRange
untuk menambah berbilang item secara serentak. Had ini boleh menyusahkan apabila berurusan dengan set data yang besar atau menggantikan keseluruhan koleksi.
Mencipta Custom ObservableRangeCollection
Untuk menangani perkara ini, kami boleh membina kelas ObservableRangeCollection
tersuai yang memanjangkan ObservableCollection
dan menggabungkan fungsi AddRange
yang diingini. Begini cara untuk melaksanakan ini dalam C# dan VB.NET:
Pelaksanaan 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>
Pelaksanaan 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>
Menggunakan Koleksi Tersuai:
Selepas mencipta kelas ObservableRangeCollection
, anda boleh menggunakannya sama seperti ObservableCollection
standard, tetapi kini dengan kaedah AddRange
tambahan:
<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>
Memperluaskan Fungsi Lebih Lanjut
Koleksi tersuai ini boleh dipertingkatkan lagi dengan menambahkan kaedah seperti RemoveRange
, Replace
dan ReplaceRange
untuk menyediakan keupayaan pengurusan koleksi yang lebih komprehensif.
Atas ialah kandungan terperinci Mengapa ObservableCollection Tidak Mempunyai Kaedah AddRange, dan Bagaimana Saya Boleh Menambahkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!