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 :

Comment utiliser les listes génériques ?


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Comment utiliser les listes génériques ?
    Bonjour,
    je souhaite utiliser les types génériques afin de stocker 2 types de valeurs différentes dans une variable.
    En fait je construit dynamiquement une requete SQL avec des paramètres, ce sont ces paramètres que je souhaite stocker dans ma variable, ils sont de 2 types: string et object.
    Le problème est que je n'ai pas très bien compris comment utiliser une liste générique avec 2 valeurs à stocker par "lignes"!

    voici un début de ce que j'aimerais faire:

    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
    private class Parameters
    {
       string paramName {get; set;}
       object paramValue {get; set;}
    }
     
    public static void Main(string[] args)
    {
       List<Parameters> maListDeParam = new List<Parameters>();
     
       maListDeParam.Add("un string");
       maListDeParam.Add("un objet");
     
       //parcours de la liste
       foreach (obj o in maListDeParam)
          //ici l'accès aux objets de ma liste!!
    }
    Merci d'avance à ceux qui peuvent m'aider!!!

  2. #2
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maListe.Add(new Parameter(machaine, mavalue));
    Mon code sous-entends que tu as créé le constructeur avec 2 arguments.

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Vu l'utilisation (paramètre pour requête SQL), un dictionnaire semblerait plus approprié qu'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dictionary<string, object> parametres = new Dictionary<string, object>();
    parametres.Add("MonParam1", valeur1);
    parametres.Add("MonParam2", valeur2);
    parametres.Add("MonParam3", valeur3);
    ...
    foreach(KeyValuePair<string, object> parametre in parametres)
    {
       string paramName = parametre.Key;
       object valeur = parametre.Value;
    }

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci pour vos 2 idées.
    Les 2 exemples proposés me semble convenir, sauf que je me rends compte que j'ai un 3ème paramètre à utiliser, le type de l'objet jsutement.
    le dictionary accepte 3 paramètres?
    SInon, pour le list "normal", je peux l'utiliser avec 3 paramètres.
    L'autre problème est, comment accéder aux valeurs de mes objets stockés dans la liste?
    avec le for each bien sur, mais comment spécifier la "colonne" de l'objet que je veux utiliser?

    voici mon début de solution:
    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
     
    private class Parameters<S, O, T>
            {
                private S paramName { get; set; }
                private O paramValue { get; set; }
                private T paramType { get; set; }
     
                public Parameters(S name, O value, T pType)
                {
                    paramName = name;
                    paramValue = value;
                    paramType = pType;
                }
            }
     
    List<Parameters> listParameters = new List<Parameters>();
     
    listParameters.Add(new Parameters("nom du paramètre", "valeur", typeof(string)));
     
    foreach (object o in listParameters)
    -----?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le dictionary marche comme ca :
    tu as une clef et un objet associé à ta clef
    Tu pourrais donc avoir un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private class Parameter
    {
        private object paramValue { get; set; }
        private Type paramType { get; set; }
     
        public Parameters(O value, T pType)
        {
            paramValue = value;
            paramType = pType;
        }
    }
     
    Dictionary<string, Parameter> parametres = new Dictionary<string, Parameter>();
    Ceci dit tant qu'a utiliser la généricité autant vraiment l'utiliser et avoir ceci :
    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
    private class Parameters
            {
                private String paramName { get; set; }
                private Object paramValue { get; set; }
                private Type paramType { get; set; }
     
                public Parameters(String name, Object value, Type pType)
                {
                    paramName = name;
                    paramValue = value;
                    paramType = pType;
                }
            }
     
    List<Parameters> listParameters = new List<Parameters>();
     
    listParameters.Add(new Parameters("nom du paramètre", "valeur", typeof(string)));
     
    foreach (Parameters p in listParameters)
            Console.WriteLine(p.paramName);
    J'espère que ca t'aidera

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Finalement je me suis inspiré de vos idées et j'ai résolu mon problème comme ceci:
    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
     
     
    //classe générique
    public class ParametersCmd<S, O, T>
        {
            public S paramName { get; set; }
            public O paramValue { get; set; }
            public T paramType { get; set; }
     
            public ParametersCmd(S name, O value, T pType)
            {
                paramName = name;
                paramValue = value;
                paramType = pType;
            }
        }
     
     List<ParametersCmd<string, object, Type>> listParameters = new List<ParametersCmd<string,object,Type>>();
     
    listParameters.Add(new ParametersCmd<string, object, Type>("nom", "valeur", typeof(string)));
     
     foreach (ParametersCmd<string, object, Type> o in listParameters)
                   Writeln(o.paramName, o.paramType, o.paramValue);
    Encore un grand merci!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Juste une question : pourquoi tu paramétrises ta classe avec string, object et Type ? C'est pas toujours ca que tu vas utiliser comme types ? Si oui c'est inutile, la généricité n'est à employer que quand elle sert vraiment. Ca allégera ta notation si tu t'en sers pas.
    A plus

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par George7 Voir le message
    Juste une question : pourquoi tu paramétrises ta classe avec string, object et Type ? C'est pas toujours ca que tu vas utiliser comme types ? Si oui c'est inutile, la généricité n'est à employer que quand elle sert vraiment. Ca allégera ta notation si tu t'en sers pas.
    A plus
    J'ai fait cela, afin de pouvoir adapter cette classe à d'autres types de données!
    Pour ma première utilisation de la généricité, autant aller jusqu'au bout

  9. #9
    Invité
    Invité(e)
    Par défaut
    oki doki.
    Bonne continuation

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

Discussions similaires

  1. [XL-2010] Comment utiliser les valeurs d'une zone de liste ou d'une combobox ?
    Par Stiard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2014, 09h09
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. [COM] Comment utiliser les événements Word ?
    Par Laurent Dardenne dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 30/05/2004, 12h38
  4. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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