Duplication efficace des listes génériques en C #
La création d'une copie d'une liste générique est une tâche fréquente en C #, bien que la langue manque d'une méthode directe list.Clone()
. Cet article explore plusieurs stratégies efficaces pour la duplication des listes.
Duplication de la liste de types de valeur:
Pour les listes contenant des types de valeur, la copie est simple:
<code class="language-csharp">List<YourType> newList = new List<YourType>(oldList);</code>
Cela crée une nouvelle liste avec des éléments identiques à l'original. Notez que cela effectue une copie superficielle pour les types de valeur.
Listes de type de référence de copie profonde:
Avec les types de référence, une copie profonde est nécessaire pour éviter les références d'objets partagés. Si vos éléments implémentent ICloneable
:
<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>
Cela itère et clones chaque élément individuellement.
Tirant des constructeurs de copie:
Si vos éléments ont des constructeurs de copie mais n'implémentent pas ICloneable
:
<code class="language-csharp">List<YourType> oldList = new List<YourType>(); List<YourType> newList = new List<YourType>(oldList.Count); oldList.ForEach(item => newList.Add(new YourType(item)));</code>
Ceci utilise le constructeur de copie pour chaque élément.
Méthodes de clonage personnalisées:
Pour des scénarios plus complexes, envisagez une méthode de copie personnalisée (par exemple, YourType.CopyFrom()
) ou une méthode d'usine pour fournir un contrôle à grain fin sur le processus de clonage.
Encapsulation pour la réutilisabilité:
Pour améliorer l'organisation du code et la réutilisabilité, enveloppez ces approches en méthodes d'extension ou en fonctions d'assistance autonomes.
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!