Copie Complète ArrayList

Signaler
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
-
Messages postés
14595
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 août 2020
-
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"

Donc voici les manipulations que j'ai testés :

maListe2 = new ArrayList(maListe);

//ou

maListe2 = maListe;

//ou

maListe2 = maListe.Clone();


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.
A voir également:

5 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
Bonjour,

L'ArrayList c'est le mal :D
Utilise plutôt List<Personne>.

Quant à la recopie, il existe plein de façon de faire...
- A la main (foreach),
- Sérialisation / désérialisation binaire
- DeepClone()...


Sébastien
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
ArrayList est une collection d'objets.

A chaque fois que tu récupères un élément tu es obligé de tester qu'il est du bon type et tu dois le caster.

ArrayList maListe = new ArrayList(); 

// [...]

Person p = (Person)maListe[5];


Alors que List<Person> est une collection typée. Elle ne peut contenir QUE des objets de type Person.

List<Person> maListe = new List<Person>();

// [...]

Person p = maListe[5];

Messages postés
14595
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 août 2020
426
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



tu peux aussi te servir de MemberWiseClone
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013

Merci beaucoup Sébastien pour ta réponse.

En quoi l'ArrayList c'est le mal ?
En quoi utiliser une List<Personne> est mieu ?

Merci d'avance.
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013

Merci de l'information.
Ensuite je pense faire une fonction foreach pour copier une List

Je ne connais pas les autres procédés...