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!