2010-11-07 5 views
1

Possible en double:
How do I clone a generic list in C#?clonage une liste en C#

hey j'ai essayé de cloner une liste et jusqu'à présent je l'ai trouvé la fonction AddRange mais je suis sûr qu'il ne clone pas les objets dans la liste mais fait une copie superficielle de la liste je voudrais savoir comment cloner la liste merci d'avance.

+0

voir http://stackoverflow.com/questions/222598/how-do-i-clone-a-generic-list-in-c – AdamSane

Répondre

7

Pour cloner une liste, chaque élément individuel doit être cloné. Fourni une mise en œuvre utile du clone() pour la classe d'élément existe, c'est un one-liner LINQ:

List<MyType> lstCloned = lstOriginal.Select(i => i.Clone()).ToList(); 
0

Vous devrez analyser la liste et créer un nouvel objet pour chaque élément, puis le nouvel élément l'ajoutera à une nouvelle liste.

3

AddRange, et plus généralement toutes les opérations sur les objets contenus dans la liste que des références de clones à ces objets. Pour cloner des objets eux-mêmes, vous devez gérer la copie au niveau de l'objet lui-même.

Qu'entendez-vous par "cloner la liste"? Cloner les objets? Vous pouvez l'implémenter explicitement sur chaque objet (en réalisant une interface ICloneable par exemple), ou faire une implémentation générale en utilisant Reflection.

Recherchez «ICloneable», «deep cloning» ou «deep copy» pour en savoir plus sur les différentes façons d'obtenir le résultat attendu.