Maison >développement back-end >C++ >Pourquoi ObservableCollection n'a-t-il pas de méthode AddRange et comment puis-je en ajouter une ?
Fonctionnalité AddRange manquante d'ObservableCollection et solution de contournement
La norme ObservableCollection
dans .NET n'inclut pas de méthode AddRange
pour ajouter plusieurs éléments simultanément. Cette limitation peut être lourde lorsqu'il s'agit de grands ensembles de données ou du remplacement de l'intégralité de la collection.
Création d'une collection ObservableRangeCollection personnalisée
Pour résoudre ce problème, nous pouvons créer une classe ObservableRangeCollection
personnalisée étendant ObservableCollection
et incorporant la fonctionnalité AddRange
souhaitée. Voici comment implémenter cela en C# et VB.NET :
Implémentation 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>
Implémentation 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>
Utilisation de la collection personnalisée :
Après avoir créé la classe ObservableRangeCollection
, vous pouvez l'utiliser de la même manière qu'une classe ObservableCollection
standard, mais maintenant avec la méthode AddRange
ajoutée :
<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>
Étendre davantage les fonctionnalités
Cette collection personnalisée peut être encore améliorée en ajoutant des méthodes telles que RemoveRange
, Replace
et ReplaceRange
pour fournir des capacités de gestion de collection encore plus complètes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!