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 :

Type d'objet contenu dans un arrayList [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut Type d'objet contenu dans un arrayList
    Bonjour à tous
    Je pense que le titre est assez expressif.

    J'ai une méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void traitement_des_lecture(ArrayList tab_lecture)
    foreach (Type_tab_lecture _my_enreg in tab_lecture)
    {
    ...
    }
    Si les traitements sont les mêmes, les arrayList ne le sont pas.
    Comment je peux dynamiser le Type_tab_lecture de mon foreach.

  2. #2
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Ok j'ai trouvé ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tab_lecture[0].GetType()
    c'est pas super propre vu que je pense que je serai obligé de gérer les arraylist null mais bon.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ta question n'est pas très claire... Qu'est-ce que tu cherches à faire exactement ?

    Soit dit en passant, à moins que tu n'utilises encore .NET 1.x, il vaut mieux éviter d'utiliser ArrayList. Il vaut mieux utiliser les collections génériques comme List<T> (List<Type_tab_lecture> dans ton cas)

  4. #4
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Disons que dans mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void traitement_des_lecture(ArrayList tab_lecture)
    Je peux envoyer des arrayList de différents Objets.

    Donc pour mes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach (Type_tab_lecture _my_enreg in tab_lecture)
    {
    ...
    }
    Pourrai se transformer dynamiquement en
    foreach (Type_Voiture _my_enreg in tab_lecture)
    {
    ...
    }
    ou

    foreach (Type_Maison _my_enreg in tab_lecture)
    {
    ...
    }


    Mais tu m'as dis quelque chose de plus intéressant.
    Soit dit en passant, à moins que tu n'utilises encore .NET 1.x, il vaut mieux éviter d'utiliser ArrayList. Il vaut mieux utiliser les collections génériques comme List<T> (List<Type_tab_lecture> dans ton cas)
    Pourquoi ? (Je suis au 3.5)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 196
    Par défaut
    parce que tu peux spécialiser les List<T>
    et donc ca empeche de faire des erreurs mettre des Voitures dans une liste de personne par exemple

    Avec une List<Voiture> tu es sur d'avoir que des voitures de plus tu évites de devoir caster

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    listVoiture[0].Moteur;
    (Voiture)arrayList[0].Moteur;
    Pour plus d'info ici (note)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par rockley Voir le message
    Mais tu m'as dis quelque chose de plus intéressant.


    Pourquoi ? (Je suis au 3.5)
    Parce que c'est fortement typé ; au lieu d'une liste de object qui peuvent être n'importe quoi, tu as une liste de T (T étant un type précisé dans la déclaration). Donc plus besoin de faire des cast, pas de risque d'ajouter à la liste un objet d'un type incorrect, etc.

    En plus ça résout ton problème, en rendant la méthode générique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void traitement_des_lecture<T>(IList<T> tab_lecture)
    {
        foreach (T _my_enreg in tab_lecture)
        {
            ...
        }
    }
    Ca s'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    List<Type_tab_lecture> list = new List<Type_tab_lecture>();
    list.Add(...);
     
    ...
     
    traitement_des_lecture<T>(list);
    // ou même, en profitant de l'inférence de type générique :
    // traitement_des_lecture(list);

  7. #7
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Je suis désolé mais je ne vois pas la différence.

    En gros je lis plusieurs table oracle.
    Pour chaque table, j'ai une classe.

    par exemple pour voiture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Classe Voiture
    {
    String Mark;
    String Prix;
    String Couleur;
       public Voiture(OracleDataReader dr){
           _Mark = dr["Mark"].ToString();
           _Prix =  dr["Prix"].ToString();
           _Couleur = dr["Couleur"].ToString();
       }
       + les getters
    }

    Pour crée mon arrayList de Voiture je lance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                while (dr.Read())
                {
                    res.Add(new Voiture(dr));
                }
    Je vois pas comment je peux me retrouver avec d'autres objets dans mon arrayList que des voitures.

    Je n'ai peu être pas été claire sur ce que je voulais, dsl.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Type des objets contenu dans un datatable
    Par lasrevinu dans le forum C#
    Réponses: 4
    Dernier message: 20/05/2010, 12h47
  2. Réponses: 6
    Dernier message: 14/11/2007, 15h51
  3. Element contenu dans une ArrayList
    Par F0ussa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/05/2007, 17h10
  4. [jTree]Recupérer l'objet contenu dans la feuille
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 27/11/2006, 15h03
  5. Réponses: 4
    Dernier message: 20/07/2006, 10h35

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