Maison >développement back-end >C++ >Comment cloner une liste générique en C #?

Comment cloner une liste générique en C #?

Susan Sarandon
Susan Sarandonoriginal
2025-01-30 20:16:12146parcourir

How to Clone a Generic List in C#?

Création de copies des listes génériques en C #

Ce guide explore différentes méthodes de duplication des listes génériques en C #. Puisque List<T> n'a pas de méthode Clone() intégrée, nous examinerons plusieurs stratégies.

Copie peu profonde pour les types de valeur

Pour les listes contenant des types de valeur (comme int, double), une simple copie superficielle est suffisante:

<code class="language-csharp">List<YourType> newList = new List<YourType>(oldList);</code>

Copie profonde pour les types de référence: en utilisant iclonable

Si votre liste contient des types de référence et que vous avez besoin d'une copie profonde (une copie complètement indépendante des données), et que ces types implémentent l'interface ICloneable, vous pouvez utiliser cette approche:

<code class="language-csharp">List<ICloneable> oldList = new List<ICloneable>();
List<ICloneable> newList = new List<ICloneable>(oldList.Count);

oldList.ForEach(item =>
{
    newList.Add((ICloneable)item.Clone());
});</code>

Copie profonde pour les types de référence: tirant parti des constructeurs de copie

Si votre type d'élément a un constructeur de copie mais n'implémente pas ICloneable, cette méthode est préférable:

<code class="language-csharp">List<YourType> oldList = new List<YourType>();
List<YourType> newList = new List<YourType>(oldList.Capacity); // Use Capacity for efficiency

oldList.ForEach(item =>
{
    newList.Add(new YourType(item));
});</code>

Best Practice: Méthodes d'usine ou copie des constructeurs

Pour une copie profonde robuste, il est fortement recommandé d'utiliser une méthode d'usine (par exemple, YourType.CopyFrom()) ou un constructeur de copie au sein de votre classe personnalisée. Cela fournit un plus grand contrôle et assure une copie profonde complète de toutes les variables membres.

encapsulant la logique

Pour améliorer l'organisation du code et la réutilisabilité, envisagez d'envelopper l'une de ces techniques dans une méthode d'extension ou une fonction d'assistance dédiée.

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