Qu'est-ce qu'une NullReferenceException, et comment la corriger ?

Qu’est-ce qu’une NullReferenceException, et comment la corriger ?

Quelle en est la cause ?
En résumé

Vous essayez d’utiliser quelque chose qui est null (ou Nothing en VB.NET). Cela signifie que soit vous l’avez défini à null, soit vous ne l’avez jamais défini du tout.

Comme tout le reste, null se propage. S’il est null dans la méthode « A », il se peut que la méthode « B » ait passé un null à la méthode « A ».

null peut avoir différentes significations :

  • Les variables d’objet qui sont non initialisées et qui ne pointent donc vers rien. Dans ce cas, si vous accédez aux membres de tels objets, cela provoque une NullReferenceException.

  • Le développeur utilise null intentionnellement pour indiquer qu’aucune valeur significative n’est disponible. Notez que C# possède le concept de types de données nullables pour les variables (comme les tables de base de données peuvent avoir des champs nullables) – vous pouvez leur assigner null pour indiquer qu’aucune valeur n’y est stockée, par exemple int? a = null; (qui est un raccourci pour Nullable<int> a = null;) où le point d’interrogation indique qu’il est permis de stocker null dans la variable a. Vous pouvez vérifier cela soit avec if (a.HasValue) {...} soit avec if (a==null) {...}. Les variables nullables, comme a dans cet exemple, permettent d’accéder à la valeur via a.Value explicitement, ou simplement normalement via a.
    Remarque : l’accès via a.Value lève une InvalidOperationException au lieu d’une NullReferenceException si a est null – vous devriez effectuer la vérification au préalable, c’est-à-dire que si vous avez une autre variable non nullable int b; alors vous devriez faire des affectations comme if (a.HasValue) { b = a.Value; } ou plus court if (a != null) { b = a; }.

Le reste de cet article entre plus en détail et montre des erreurs que de nombreux programmeurs font souvent et qui peuvent conduire à une NullReferenceException.

Plus précisément

Le runtime levant une NullReferenceException signifie toujours la même chose : vous essayez d’utiliser une référence, et la référence n’est pas initialisée (ou elle a été autrefois initialisée, mais ne l’est plus).

Cela signifie que la référence est null, et vous ne pouvez pas accéder aux membres (tels que m

(Réponse tronquée)