Woslike
Messages postés46Date d'inscriptionmercredi 25 juillet 2012StatutMembreDernière intervention12 septembre 2013
-
12 sept. 2013 à 11:25
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024
-
16 sept. 2013 à 23:09
Bonjour tout le monde,
Cela fait déjà un moment que je me gratte la tête sur comment faire une copie complète d'une ArrayList.
Je m'explique (Exemple) :
J'ai une ArrayList "maListe" avec 10 instances de ma classe "Personne"
for (int i = 1; i < 10; i++)
{
maListe.Add(new Personne(i, "NOM " + i.ToString()));
}
public class Personne
{
public Personne()
{
}
public Personne(int num,string nom)
{
this._num = num;
this._nom = nom;
}
public Personne(Personne maPersonne)
{
this._num = maPersonne.num;
this._nom = maPersonne.nom;
}
public int num
{
set {this._num = value ;}
get {return this._num ;}
}
private int _num = 0;
public string nom
{
set { this._nom = value; }
get { return this._nom; }
}
private string _nom = "";
public override string ToString()
{
return this.num.ToString("000") + " " + this.nom;
}
}
J'ai besoin de faire une copie de l'ArrayList "maListe" dans une liste de travail
appellé "maListe2"
Mon souci est qu'apparemment on garde comme référence les éléments de "maListe".
Ce qui veux dire que lors que je modifie un élément de maListe2 il est aussi modifié dans maListe. Vis et versa.
La seule solution que j'ai trouvé est d'utiliser une boucle foreach pour recréer les éléments... mais ce n'ai pas du tout pratique.
Existe-t-il une autre solution ?
Je vous remercie d'avance pour vos réponses.
Cordialement Woslike.
Alias Yoan.
Whismeril
Messages postés19025Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention19 avril 2024656 16 sept. 2013 à 23:09
Bonsoir, je me trompe peut être, mais il me semble que copier les éléments d'une List<T> avec un foreach transfert la référence des éléments.
Donc là aussi, si on modifie un item d'une liste l'autre sera modifiée.
Il faut donc faire un truc dans le style:
for(int i = 0; i< list1.Count; i++)
list2.Add(list1[i].Clone();//mais il faut créer Clone dans Personne