Copie Complète ArrayList

Woslike Messages postés 46 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 12 septembre 2013 - 12 sept. 2013 à 11:25
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 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"

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.

5 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 sept. 2013 à 11:57
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
1
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 sept. 2013 à 13:40
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];

1
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
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



tu peux aussi te servir de MemberWiseClone
1
Woslike Messages postés 46 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 12 septembre 2013 1
12 sept. 2013 à 13:35
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Woslike Messages postés 46 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 12 septembre 2013 1
12 sept. 2013 à 15:45
Merci de l'information.
Ensuite je pense faire une fonction foreach pour copier une List

Je ne connais pas les autres procédés...
0
Rejoignez-nous