Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# remplissage arraylist

ajout nouvel élément dans l'arraylist avec un même objet

Sujet résolu
    19 mai 2011 à 14:53:32

    Bonjour,
    Je désire remplir une arraylist à l'aide d'un même objet. Or l'arraylist référence l'objet et donc quand je change la valeur de mon objet pour le rebalencer dans mon arraylist, alors la première valeur est modifiée. Mon code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Station s= new Station();
                ListeDeStations listeS = new ListeDeStations();
    
                s.Initialise(4, 3, "paris");
                listeS.Add(s);
                s2.Initialise(4, 3, "capri");
                listeS.Add(s);
    
                for (int i = 0; i < listeS.Count; i++)
                {
                    s = (Station)listeS[i];
                    s.Affiche();
                }
           }
       }
    }
    


    En exécutant ce code, on voit bien que les 2 objets référencés sont les mêmes. Il apparaitrait qu'une des solutions serait de faire:

    listeS.Add(new Station(4,3,"paris"));
    


    pour remplir l'arraylist avec des valeurs différentes pour les 3 paramètres.
    Mais lorsque que je met en place ce bout de code, il me dit que la classe station n'accepte pas de constructeurs acceptant 3 arguments.

    voilà mon constructeurs:

    //Constrcuteurs
            public void Initialise(int n, int m, string p)
            {
                this.l_quai = n;
                this.nbr_quais = m;
                this.nom = p;
            }
    


    Je ne sais pas trop comment régler ce soucis. La solution proposée un peu plus haut semble juste, mais je n'arrive pas à la mettre en œuvre...
    Une autre technique serait de cloner mon objet puis de référencer le clone, mais ce type de codage ne me semble pas très propre et peu judicieux.

    Alors la question est: Comment régler le soucis du référencement? Et, comment adapter la "solution" que j'ai proposé, à mon code?

    Merci beaucoup par avance, je reste à disposition pour toute question.
    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2011 à 15:15:06

      Bonjour,

      Ta méthode Initialise n'est pas un constructeur, voir cette partie du tutoriel C# de Narvath pour voir quelle est la syntaxe exacte pour faire un constructeur.

      Cordialement !
      • Partager sur Facebook
      • Partager sur Twitter
      Censément, quelqu'un de sensé est censé s'exprimer sensément.
      Anonyme
        19 mai 2011 à 15:17:55

        Ta méthode Initialise n'est pas un constructeur.
        Un constructeur, c'est ça :
        public class MyClass
        {
            // Ceci est un constructeur
            public MyClass(int someNumber)
            {
                // ...
            }
        
            // Ceci n'est pas un constructeur
            public void Initialize(string someString)
            {
                // ...
            }
        }
        
        // Ceci est possible cas MyClass(int someNumber) est un constructeur
        MyClass m = new MyClass(42);
        // Ceci n'est pas possible car Initialize(string someString) n'est pas un constructeur
        MyClass m2 = new MyClass("Hello, World!");
        


        De plus, ton type ListeDeStations me semble inutile ; ajoute un using System.Collections.Generic et utilise une List<Station>.

        Enfin, tu violes pas mal des règles de nommage .NET (libre à toi de décider si ça a de l'importance pour toi).
        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2011 à 15:27:53

          merci pour votre aide, je vais tester ça, renommer correctement, et je marquerai comme résolu =)
          • Partager sur Facebook
          • Partager sur Twitter

          C# remplissage arraylist

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown