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 :

Élément pouvant être null déclenche un avertissement [Débutant]


Sujet :

C#

  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 591
    Par défaut Élément pouvant être null déclenche un avertissement
    Bonjour

    Je regarde un peu le fonctionnement de DataGridView et voici mon code de départ :

    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
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
                dataGridView1.DataSource = new DataTable();
                (dataGridView1.DataSource as DataTable).ReadXml("E:\\mydata.xml");
            }
     
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {            
                (dataGridView1.DataSource as DataTable).WriteXml("E:\\mydata.xml", XmlWriteMode.WriteSchema); 
            }
        }
    Ce n'est sans doute pas très académique mais là n'est pas la question.

    Dans le code, (dataGridView1.DataSource as DataTable) est souligné en vert "ondulé" et le hint au-dessus me dit que Datasource peut-être null ici.
    CS8602 "Déréférencement d'une éventuelle valeur null"

    J'ai essayé d'ajouter un test juste avant chaque ligne pour vérifier si Datasource n'est pas null mais l'avertissement reste visible.

    Quelle serait la meilleure solution pour traiter ce problème ?
    J-L aka Papy pour les amis

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 357
    Billets dans le blog
    2
    Par défaut
    Essaie ça peut-être :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
                dataGridView1.DataSource = new DataTable();
                dataGridView1.DataSource.ReadXml("E:\\mydata.xml");
            }
     
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {            
                dataGridView1.DataSource?.WriteXml("E:\\mydata.xml", XmlWriteMode.WriteSchema); 
            }
        }

    Mais oui ce n'est pas très académique dans le sens où c'est dangereux d'acquérir des ressources comme ça à l'initialisation et surtout sans garde-fou. Mais ce n'est pas la question
    « [...] en ce qui concerne la doctrine selon laquelle les trois angles d'un triangle sont égaux à deux angles d'un carré, si elle avait été contraire au droit de dominer de quelqu'un, ou à l'intérêt de ceux qui dominent, je ne doute pas qu'elle eût été, sinon débattue, en tout cas éliminée en brûlant tous les livres de géométrie [...] »
    Thomas Hobbes, Léviathan, Chapitre 11

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 591
    Par défaut
    [CODE] dataGridView1.DataSource.ReadXml("E:\\mydata.xml");/CODE]

    me renvoie une erreur : Object ne contient pas de définition pour ReadXml

    mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                DataTable? table = (DataTable?)dataGridView1.DataSource;
                table?.WriteXml("E:\\mydata.xml", XmlWriteMode.WriteSchema);
    n'affiche plus d'avertissement
    J-L aka Papy pour les amis

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 591
    Par défaut
    Bon, le code suivant n'affiche plus les avertissements

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            public Form1()
            {
                InitializeComponent();
     
                DataTable? table = new DataTable();
                table.ReadXml("E:\\mydata.xml");
                dataGridView1.DataSource = table;
            }
     
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                DataTable? table = (DataTable?)dataGridView1.DataSource;
                table?.WriteXml("E:\\mydata.xml", XmlWriteMode.WriteSchema); 
            }
    Mais je me pose une question.
    Le fait de créer la variable table puis de l'assigner au Datasource, est-ce que ça ne laisse pas trainer une référence paumée dans un coin de la mémoire du progrramme ?
    J-L aka Papy pour les amis

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 357
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Le fait de créer la variable table piis de l'assigner au Datasource, est-ce que ça ne laisse pas trainer une référence paumée dans un coin de la mémoire du progrramme ?
    Le GC .Net gère très bien ce genre de cas, je ne pense pas qu'il y ait un risque. Dans le doute tu peux utiliser using. Par exemple (version pas trop vieille de C#):

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Form1()
            {
                InitializeComponent();
     
                using DataTable? table = new DataTable();
                table.ReadXml("E:\\mydata.xml");
                dataGridView1.DataSource = table;
            }
    « [...] en ce qui concerne la doctrine selon laquelle les trois angles d'un triangle sont égaux à deux angles d'un carré, si elle avait été contraire au droit de dominer de quelqu'un, ou à l'intérêt de ceux qui dominent, je ne doute pas qu'elle eût été, sinon débattue, en tout cas éliminée en brûlant tous les livres de géométrie [...] »
    Thomas Hobbes, Léviathan, Chapitre 11

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 591
    Par défaut
    Je ne connaissais pas ce terme.

    Il faut dire que ma première et unique expérience avec C# remonte bientôt à 15 ans.
    Certaines choses reviennent peu à peu mais ça prend du temps

    Merci pour le coup de main
    J-L aka Papy pour les amis

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 651
    Par défaut
    Je ne vous pas l'intérêt de "using" ici.
    Le Designer WinForm devrait avoir des composants qui gèrent plus simplement une DataSource backé" dans un fichier XML.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/08/2017, 23h02
  2. Jointure avec Foreign Key pouvant être null
    Par neo932rcl dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/03/2011, 16h16
  3. Somme de 2 champs de type BigDecimal , pouvant être null
    Par jeanphi45 dans le forum Général Java
    Réponses: 7
    Dernier message: 01/04/2010, 18h31
  4. Valeur Element pouvant être null
    Par Luc1an0 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/03/2009, 16h51

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