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中文网其他相关文章!