IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Assignation à une propriété d’une arraylist imbriquée


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut Assignation à une propriété d’une arraylist imbriquée
    Bonjour,

    Je désire remplacer dans un programme des tableaux par des arraylists
    Chaque niveau d’objet ( tableau ) ayant des attributs particuliers dont une liste d’objet ( tableau imbriqué )

    Comment traduire pour des arraylist imbriquées,
    cette assignation qui fonctionne pour des tableaux imbriqués

    immeubles[I].etages[J].appartements[K].pieces[L].nNbrPrise = nPrises;

    Merci d’avance

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    peut être ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class prop
    {
      int nNbrPrise = 0;
     
      public int NNbrPrise
      {
       get {return nNbrPrise;}
       set {nNbrPrise = value;}
      }
    }
     
    ...
    List<List<List<prop>>> vals = new ...
    vals[1][2][3].NNbrPrise = valeur;
    et si ce n'est pas ça je ne vois pas trop ce que tu veux dire par "arraylist imbriqués"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Voilà ce que j'entends par imbriqué, désolé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class Immeuble 
    {
        public ArrayList Etages = new ArrayList();       
        public Immeuble()
        {        this.Etages.Add(new Etage());    }
    }
     
    public class Etage 
    {
        public ArrayList Appartements = new ArrayList();          
        public Etage()
        {        this.Appartements.Add(new Appartement());    }
    }
     
    public class Appartement 
    {
        public ArrayList Pieces = new ArrayList();        
        public Appartement()
        {        this.Pieces.Add(new Piece());    }
    }
     
    public class Piece 
    {
        public int nNbrPrise = 0;               
        public Piece()    {    }
    }
    et donc lorsque je construit un 'Immeuble' j'ai toute la structure qui suit jusqu'a la pièce.
    Normal, un immeuble sans au moins une pièce n'a pas de raison d'être.
    Tout fonctionne à merveille avec des tableaux, mais on doit réserver à l'avance le nombre d'occurences à chaque niveau,
    et la manipulation foreach est pas terrible avec son break, ....bref je voudrais le faire avec des arraylist

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Omnibus
    mais on doit réserver à l'avance le nombre d'occurences à chaque niveau
    Ah bon ? mais si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Appartement.Pieces.Add(new Piece());
    on ne connais pas à l'avance, et après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int nombre_de_pieces = Appartement.Pieces.Count ( ou Length );

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Oui mais là tu es dans la version Arraylist, c'est celle que j'essaie de faire ou j'ai des problème d'assignation en cascade.

    Le problème de l'inintialisation c'est avec des tableaux,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        public class Immeuble
        {
            public Etage[] Etages = new Etage[10]; 
            public Immeuble()
            {               Etages[0] = new Etage();           }
        }
     
        public class Etage    
       {
            public Appartement[] Appartements = new Appartement[10];
            public Etage()
            {       Appartements[0] = new Appartement();         }
        } 
     
    etc ...
    En version tableau tu dois fixer le nombre d'occurences
    en version Arraylist comment assigner au troisième niveau ??

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    whaou, je suis perdu
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public class BaseElement<T> : object where T:class
    {
      List<T> childs = new List<T>();
     
      public virtual T this[int index]
      {
        get {
          if(childs.Length <= index)
           return default(T);
          else
           return childs[index];
        }
        set {
         while(index >= childs.Length)
           childs.Add(default(T));
     
         childs[index] = value;
         }
       }
    }
     
    public class Immeuble : BaseElement<Etage>
        {
            public Immeuble()
            { 
             this[0] = new Etage();
            }
         }
    }
     
    public class Etage : BaseElement<...>  
       {
            public Etage()
            {       this[0] = new ...();         }
        }
    ...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    là c'est toi toi qui m'a largué

    Je regarde ça demain en rentrant du boulot, là ça vol un peu trop haut pour moi à cette heure

    Mais grand merci de t'y intéresser, à demain !

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Le problème avec les arraylist, c'est que ça renvoie des références vers des Object, et tu es obligé de caster comme un fou.
    Je te conseille de remplacer tes ArrayList par des List<TonType>. Ces listes sont typées et tu n'as plus besoin de caster partout. Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class Immeuble {
      public List<Etage> Etages = new List<Etage>();
      public Immeuble() { this.Etages.Add(new Etage()); }
    }
     
    public class Etage {
      public List<Appartement> Appartements = new List<Appartement>();
      public Etage() { this.Appartements.Add(new Appartement()); }
    }
     
    public class Appartement {
      public List<Piece> Pieces = new List<Piece>();
      public Appartement()  { this.Pieces.Add(new Piece()); }
    }
     
    public class Piece {
      public int nNbrPrise = 0;
      public Piece() { }
    }
    Ce code te permettra d'utiliser la syntaxe dont tu parlais un peu plus haut.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    J'ai juste une question :
    Les List<TonType> sont elles disponibles avec le framework 1.1 ? Parce que j'ai essayé une fois, mais le Visual studio 2003 n'a pas reconnu la syntaxe.

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Non il s'agit d'un ajout du Framework 2.0.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Merci et tant pis pour moi.

  12. #12
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par ced600
    J'ai juste une question :
    Les List<TonType> sont elles disponibles avec le framework 1.1 ? Parce que j'ai essayé une fois, mais le Visual studio 2003 n'a pas reconnu la syntaxe.
    oops, j'avais admis qu'il avait le .NET Framework 2.0 ... honte à moi ( faut passer au .NET Framework 2.0 ( ou 3.X ) c'est très agréable par rapport au 1.0 . Si tu as un problème d'IDE ( pas envie d'acheter Visual Studio 2005 ) essaye SharpDevelop : comparé à VS 2003 je pense qu'il a l'aventage ...ce qui n'est pas forcément vrai pour VS 2005 )

    edit: je me suis peut être emporté

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Je ne sais pas Omnibus est en 1.1 ou > 2.0
    Mais en tout cas certaine fois il n'est pas interessant de passer en 2.0 voir 3.0 même si c'est plus agréable.
    En effet imagine que les machines sur lesquels seront installés tous les softs que tu developpes possèdent le framework 1.1. Bah faire du .Net 2.0 t'obliges à embarquer la mise à jour vers le 2.0 avec ton installeur (ce qui l'allourdi considérablement et te rajoute un problème d'installation potentielle supplémentaire).
    Alors pour le dev de certaines applications cela ne vaut pas le coup.
    Et installer le 2.0 et faire du 1.1 c chiant, faut toujuors vérifier que ce que tu utilises est bien présent sur le 1.1 et des fois va falloir préciser que tu veut utiliser le framework 1.1.

  14. #14
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Pour être un peut plus sérieux, le .NET 2.0 apporte des corrections quant au fonctions du .NET 1.1 et ça peut permettre d'éviter certains bugs et d'optimiser certaines parties de ton application. Par exemple, je ne jure plus que par les Generics car entre ArrayList où on ne sais jamais vraiment ce qu'il y a dedans et List<...>, il n'y a pas photo. Au final il faudra bien faire une mise à jour à un moment donné et faire la transition du .NET 1.1 au 2.0 est déjà une étape problématique, alors si au final tu dois faire une mise à jour de .NET 1.1 vers .NET 3.5 direct, ça va devenir vite très embettant.
    Après, l'installation du framework fait ~20 Mo donc ce n'est à priori pas très volumineux, à moins que ton application fasse 500 Ko ...
    Pour finir, si maintenant tu programmes ton application avec le .NET 1.1 et que dans tes utilisateurs y'en a un qui fait le malheur d'avoir Windows Vista, il y a de grandes chances que ton application ne tourne pas sur sa machine et celà risque d'être embettant ...

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Après, l'installation du framework fait ~20 Mo donc ce n'est à priori pas très volumineux, à moins que ton application fasse 500 Ko
    Bah c'est mon cas.
    Pas d'utilisateur de vista.
    Et avant que le framework ne soit mis à jour, mon application sera devenu inutile.
    Je voulais juste rappeler par la que dans certain cas, les mises à jours ne sont pas possibles ou interessantes, et il ne faut pas l'oublier.
    Même problème pour certaines entreprises avec JAVA.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2013, 22h20
  2. Réponses: 2
    Dernier message: 16/01/2012, 10h28
  3. Une propriété de profil de type ArrayList
    Par insane_80 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 22/04/2008, 12h44
  4. assigner une valeur à la propriété text d'un label
    Par Abac_Angelique dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/11/2007, 16h06
  5. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo