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
nullintentionnellement 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 assignernullpour indiquer qu’aucune valeur n’y est stockée, par exempleint? a = null;(qui est un raccourci pourNullable<int> a = null;) où le point d’interrogation indique qu’il est permis de stockernulldans la variablea. Vous pouvez vérifier cela soit avecif (a.HasValue) {...}soit avecif (a==null) {...}. Les variables nullables, commeadans cet exemple, permettent d’accéder à la valeur viaa.Valueexplicitement, ou simplement normalement viaa.
Remarque : l’accès viaa.Valuelève uneInvalidOperationExceptionau lieu d’uneNullReferenceExceptionsiaestnull– vous devriez effectuer la vérification au préalable, c’est-à-dire que si vous avez une autre variable non nullableint b;alors vous devriez faire des affectations commeif (a.HasValue) { b = a.Value; }ou plus courtif (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)