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 :

initialisation d'un tableau dynamique dans une list<T>


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut initialisation d'un tableau dynamique dans une list<T>
    Salut,
    J'ai créé la structure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public struct LibelleMultiLangue
        {
            public int IdMsg;
            public string ErrorCode;
            public string[] libelle;
        }
    je ne connais pas a l'avance le nombre de champ "libelle" => je voudrais utiliser un tableau dinamyque
    J'essaie de créer un fonction test pour remplir le tableau

    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
    private void btnTestFindIndex_Click(object sender, EventArgs e)
            {
                List<LibelleMultiLangue> lmsg = new List<LibelleMultiLangue>();
                LibelleMultiLangue msg = new LibelleMultiLangue();
                for (int i = 0; i < 1000; i++)
                {
                    msg.ErrorCode = (i+1).ToString();
                    msg.IdMsg = i+1;
     
                    msg.libelle[0]="LIB" + (i + 1).ToString() + "_0";
                    msg.libelle[1]="LIB" + (i + 1).ToString() + "_1";
                    msg.libelle[2]="LIB" + (i + 1).ToString() + "_2";
                    msg.libelle[3]="LIB" + (i + 1).ToString() + "_3";
     
                    lmsg.Add(msg);
                }
                GetMessageFromCode(lmsg, "100", 3);
            }

    dur la ligne de code suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msg.libelle[0]="LIB" + (i + 1).ToString() + "_0";
    j'ai une erreur me disant
    object reference not set to an instance of an object.
    Quelqu'un serait-il me dire où se situe mon erreur?
    Merci
    Christophe
    PS: j'ai essayé en changeant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public string[] libelle;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public <string> libelle;
    et en utilisant ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msg.libelle.add("LIB" + (i + 1).ToString() + "_3");
    Ca me donne le même résultat...

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    L'erreur est due au fait que tu essayes de stocker des valeurs dans msg.libelle alors qu'il n'est pas initialisé
    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
    private void btnTestFindIndex_Click(object sender, EventArgs e)
            {
                List<LibelleMultiLangue> lmsg = new List<LibelleMultiLangue>();
                for (int i = 0; i < 1000; i++)
                {
                    LibelleMultiLangue msg = new LibelleMultiLangue(); //sinon tu ajoutes toujours la meme variable dans lmsg
     
                    msg.libelle=new string[4]; // sinon ton array n'est pas initialisé (c'est mieux d'utiliser une une list mais il faudrait aussi faire un new List<string>())
                    msg.ErrorCode = (i+1).ToString();
                    msg.IdMsg = i+1;
     
                    msg.libelle[0]="LIB" + (i + 1).ToString() + "_0";
                    msg.libelle[1]="LIB" + (i + 1).ToString() + "_1";
                    msg.libelle[2]="LIB" + (i + 1).ToString() + "_2";
                    msg.libelle[3]="LIB" + (i + 1).ToString() + "_3";
     
                    lmsg.Add(msg);
                }
                GetMessageFromCode(lmsg, "100", 3);
            }
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    object reference not set to an instance of an object
    est du à l'acces à une NullValue donc un petit breakpoint et vérifier les différentes variables aide souvent à trouver l'erreur
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Yop, j'etais tombe la dessus aussi, j'ai donc modifié mon code 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
    24
     
     
            private void btnTestFindIndex_Click(object sender, EventArgs e)
            {
                List<LibelleMultiLangue> lmsg = new List<LibelleMultiLangue>();
                LibelleMultiLangue msg = new LibelleMultiLangue();
                msg.libelle = new List<string>();
                for (int i = 0; i < 1000; i++)
                {
                    msg.ErrorCode = (i+1).ToString();
                    msg.IdMsg = i+1;
                    msg.libelle.Clear();
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_1");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_2");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_3");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_4");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_5");
     
                    lmsg.Add(msg);
                }
     
                MessageBox.Show(GetMessageFromCode(lmsg, "100", 3));
            }
        }
    Mais dans ce cas, mes errorcode, idmsg sont bien différent mais je me retrouve avec les meme valeur pour chaque tableau de libelle (la valeur calculée pour le dernier élément du tableau)

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    en mettant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msg.libelle = new List<string>();
    dans ma boucle "for", je n'ai plus ce problème mais cette solution me semble peu élégante.
    Qqun aurait-il une autre solution?

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    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
     
    private void btnTestFindIndex_Click(object sender, EventArgs e)
            {
                List<LibelleMultiLangue> lmsg = new List<LibelleMultiLangue>();
                for (int i = 0; i < 1000; i++)
                {
                    LibelleMultiLangue msg = new LibelleMultiLangue();
                    msg.libelle = new List<string>();
     
                    msg.ErrorCode = (i+1).ToString();
                    msg.IdMsg = i+1;
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_1");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_2");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_3");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_4");
                    msg.libelle.Add("LIB" + (i + 1).ToString() + "_5");
     
                    lmsg.Add(msg);
                }
     
                MessageBox.Show(GetMessageFromCode(lmsg, "100", 3));
            }
        }
    L'explication était dans la premiere réponse
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Accessoirement les concaténations de chaine dont on abuse inutilement et à plaisir ici sont contre-performantes au possible.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    oui, je sais mais c'était juste pour un test, au final, les données viendrons d'une DB et j'aurais juste a reprendre les valeur des champs LIB1,LIB2,... pour populer mes libellés

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

Discussions similaires

  1. [Conception] Insertion de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 12/05/2011, 14h39
  2. Réponses: 4
    Dernier message: 01/01/2007, 10h26
  3. [SQL] Modification de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/06/2006, 16h55
  4. Réponses: 1
    Dernier message: 23/06/2006, 11h19
  5. Réponses: 9
    Dernier message: 22/06/2006, 20h06

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