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 :

Erreur lors de l'instanciation d'un objet


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Erreur lors de l'instanciation d'un objet
    Bonjour à tous,

    Je viens de créer une classe cAnnuaireResult.
    L'objet cAnnuaireResultat correspond aux coordonnées d'une personne

    Voici le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public cAnnuaireResult(string strNom, string strPrenom, ArrayList arStrTel, string strMail, string strRue, string strVille, string strCpostal)
            {
                m_strMail = strMail;
                m_strNom = strNom;
                m_strPrenom = strPrenom;
                m_arTel = new ArrayList();
                m_arTel = arStrTel;
                m_strRue = strRue;
                m_strVille = strVille;
                m_strCpostal = strCpostal;
            }
    Voici l'appel de mon instentiation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new cAnnuaireResult(Nom[i].InnerXml, FirstName[i].InnerXml, (ArrayList)m_strPhone[i], "", Rue[i].InnerXml, Ville[i].InnerXml, CPostal[i].InnerXml));
    Mon problème est que je possède certaines fiches sans prénom, et le compilateur me sors une exception du type
    La référence d'objet n'est pas définie à une instance d'un objet.
    Et je pense que cela vient du fait que FirstName[i].InnerXml n'existe pas.

    Je précise que me résultats proviennent d'un service web, le tout est un xml que je parse grâce aux méthodes "GetElementsByTagName".

    Comment me sécuriser au niveau de l'instentiation de ma classe ? En effet, le prénom n'est pas "obligatoire".

    Merci à tous

    Bien cordialement,

    Nixeus

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    Solution possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Dans ton constructeur cAnnuaireresult à la place de m_prenom = strPrenom;
    if(strPrenom != null)
          m_prenom = strPrenom;
    else
          m_prenom = String.Empty;

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ta réponse rapide.
    Je reste sceptique car le compilateur donne cette erreur d'exception directement sur la ligne du new ! Mais je tester de suite

    Merci

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Le problème est plus vicieux.
    Lors du parsing XML pour ma réponse en question, aucun prénom n'est renvoyé, donc FirstName[i].InnerXml n'existe pas !

    L'accès à FirstName[i].InnerXml crée donc l'exception.

    Il faudrait donc que je modifie la taille du tableau FirstName en fonction du nombres de résultats renvoyés.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    Alors tout simplement avant de créer ton objet de type cAnnuaireResult tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(FirstName[i].InnerXml == null)
         FirstName[i].InnerXml = String.Empty;

  6. #6
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    tu peux donner le code où tu lis le xml ? ç'est plutôt là que tu dois faire quelque chose.
    En plus avec tes Nom[i], etc, ça me parait louche.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour,,

    J'ai réglé le problème mais mon code est "sale"

    La structure du XML que je reçois n'est pas simple à parser.
    En gros je parse le tout en utilisant cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNodeList FirstName   = xmlDoc.GetElementsByTagName("firstname");
    A la fin, dans un for, j'ajoute le tout à une liste générique, qui est une collection d'objet correspondant aux résultats.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    for (int i = 0; i <= m_strId.Count() - 1; i++)
                    {
                        m_ListAnnuaireResult.Add(new cAnnuaireResult(Nom[i].InnerXml, FirstName[i].InnerXml, (ArrayList)m_strPhone[i], "", Rue[i].InnerXml, Ville[i].InnerXml, CPostal[i].InnerXml));
                    }
    Le problème est que les tailles des "XmlNodeList" ne sont pas les même.
    Je m'explique, je fais une requête, cette dernière me renvoie 10 résultats.
    Un des contacts n'a pas de prénom, donc son "XmlNodeList" aura une taille de 9. Lors du 10ème ajout ( dans la 10eme itération du for), l'index 9( 10-1) n'existant pas sur le prénom, on tombe sur une Exception.

    Pour pallier à ça, j'ai donc tout réécrit dans des tableau de strings.....

    Mais je trouve ça lourd

  8. #8
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    c'est bien ce qui me semblait...
    personnellement, quand je parse du xml, je boucle (dans ton cas sur une personne) avec xpath. c'est le seul moyen de s'assurer que tout est complet. Je ferai donc un pas -> une entité.

    Avec LinQ2Xml il y a un moyen de faire, mais je ne connais pas.
    Tu peux aussi regarder du côté de XmlSerializer & cie
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

Discussions similaires

  1. erreur lors de l'insertion d'un objet graphique dans openoffice
    Par hirondellle dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 15/03/2012, 17h17
  2. Réponses: 1
    Dernier message: 13/11/2011, 13h45
  3. Erreur lors de l'instanciation d'une classe
    Par Aloneghost dans le forum Langage
    Réponses: 6
    Dernier message: 21/06/2010, 21h14
  4. Réponses: 5
    Dernier message: 04/10/2006, 15h45
  5. [INSERT] Erreur lors de l'ajout d'un objet
    Par bouchette63 dans le forum DB2
    Réponses: 3
    Dernier message: 30/08/2006, 09h32

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