Maison >développement back-end >C++ >Pourquoi ObservableCollection n'a-t-il pas de méthode AddRange et comment puis-je en ajouter une ?

Pourquoi ObservableCollection n'a-t-il pas de méthode AddRange et comment puis-je en ajouter une ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-20 07:07:12962parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn