Copie Complète ArrayList

Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
- - Dernière réponse : Whismeril
Messages postés
13988
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2019
- 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"

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.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 223 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
1
Merci
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];

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 223 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebmafate
Messages postés
13988
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 novembre 2019
319
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 223 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Whismeril
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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.
Commenter la réponse de Woslike
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
Merci de l'information.
Ensuite je pense faire une fonction foreach pour copier une List

Je ne connais pas les autres procédés...
Commenter la réponse de Woslike