Problème dans un foreach [Résolu]

Signaler
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2013
-
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2013
-
Bonjour tout le monde,

J'ai un petit problème avec le message d'erreur suivant "la référence d'objet n'est pas définie à une instance d'un objet" dans un foreach.

Voici le code:

List<LangueInfoResponse> langueInfoResponses = new List<LangueInfoResponse>();
            LangueInfoResponse langueInfoResponse = new LangueInfoResponse();
            try
            {                
                Langue langue = new Langue();
                
                Dao dao = new Dao();
                List<Langue> langues = dao.FindLangues(langue);

                if (langues.Count != 0)
                {
                    foreach (Langue langueList in langues)
                    {
                        //l'erreur arrive dès cette ligne
                        langueInfoResponse.LangueInfo.Id = langueList.Fields["Id"];
                        langueInfoResponse.LangueInfo.Langue = langueList.Fields["Langue"];
                        langueInfoResponse.Successful = true;

                        langueInfoResponses.Add(langueInfoResponse);
                    }
                }
                //...


En fait pour expliquer, "langueInfoResponse" est une structure de réponse qui contient un booléen et un string pour les message, ainsi qu'une autre structure "LangueInfo" qui contient tous les champs de ma base de donnée. Ce que je ne comprends pas, c'est pourquoi j'ai ce message d'erreur alors que j'instancie bien toutes mes variables avant le "try"...

Si quelqu'un pourrait m'apporter son aide pour résoudre ce problème, ca serait sympa!!

Merci beaucoup!!!!

4 réponses

Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2013

Je vous remercie à tous les 2 pour vos réponses, j'ai modifié mon code pour utiliser directement la structure de donnée LangueInfo. Voilà le code au cas où ca pourrait servir un jour.

List<LangueInfo> langueInfos = new List<LangueInfo>();      
Langue langue = new Langue();
Dao dao = new Dao();
List<Langue> langues = dao.FindLangues(langue);

if (langues.Count != 0)
{
    foreach (Langue langueList in langues)
    {
        LangueInfo langueInfo = new LangueInfo();
        langueInfo.Id = langueList.Fields["Id"];
        langueInfo.Langue = langueList.Fields["Langue"];
        langueInfos.Add(langueInfo);
    }
}


Et maintenant tout marche bien, je récupère bien toutes les données de ma base.
Encore merci pour votre aide
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
17
Bonjour,

Et pourquoi ne pas mettre un point d'arrêt et regarder avec le "watcher" tes objets ?
Je miserai bien sur
langueInfoResponse.LangueInfo = null

ou
langueList.Fields = null


Par contre, je ne comprend pour pourquoi passer par un tableau de champs (langueList.Fields) ?
N'aurais-tu pas mieux fait de directement passer par un DataSet et remplir tes réponses ?

Bonne journée,

Billou_13

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
137
Date d'inscription
samedi 24 septembre 2005
Statut
Membre
Dernière intervention
12 avril 2013

Bonjour,

merci pour ta réponse. Pour répondre à ta question du dataset, ce n'est pas un projet personnel, mais professionnel, ce n'est donc pas moi qui ai choisi de passer un Dictionnary. Personnellement, je serais aussi passé par un dataset, mais bon. Je vais voir de plus près ce que tu m'as donné comme piste.

Merci encore de ta réponse.
Messages postés
14842
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
15 octobre 2020
92
Hello,

Langue langue = new Langue();
Dao dao = new Dao();
List<Langue> langues = dao.FindLangues(langue);

Je suppose que toutes les inits sont faites dans les contructeurs

if (langues.Count != 0)
{
  foreach (Langue langueList in langues)
[...]

Pas besoin de vérifier la taille: si c'est vide, tu ne passeras pas dans le foreach
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...