<p>Quelle en est la cause ?<br>
En résumé</p>
<p>Vous essayez d’utiliser quelque chose qui est <code>null</code> (ou <code>Nothing</code> en <a href="http://VB.NET">VB.NET</a>). Cela signifie que soit vous l’avez défini à <code>null</code>, soit vous ne l’avez jamais défini du tout.</p>
<p>Comme tout le reste, <code>null</code> se propage. S’il est <code>null</code> <em>dans</em> la méthode « A », il se peut que la méthode « B » ait passé un <code>null</code> <em>à</em> la méthode « A ».</p>
<p><code>null</code> peut avoir différentes significations :</p>
<ul>
<li>
<p>Les variables d’objet qui sont <strong>non initialisées</strong> et qui <strong>ne pointent donc vers rien.</strong> Dans ce cas, si vous accédez aux membres de tels objets, cela provoque une <code>NullReferenceException</code>.</p>
</li>
<li>
<p>Le développeur utilise <strong><code>null</code> intentionnellement pour indiquer qu’aucune valeur significative n’est disponible.</strong> 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 <code>null</code> pour indiquer qu’aucune valeur n’y est stockée, par exemple <code>int? a = null;</code> (qui est un raccourci pour <code>Nullable<int> a = null;</code>) où le point d’interrogation indique qu’il est permis de stocker <code>null</code> dans la variable <code>a</code>. Vous pouvez vérifier cela soit avec <code>if (a.HasValue) {...}</code> soit avec <code>if (a==null) {...}</code>. Les variables nullables, comme <code>a</code> dans cet exemple, permettent d’accéder à la valeur via <code>a.Value</code> explicitement, ou simplement normalement via <code>a</code>.<br>
<strong>Remarque</strong> : l’accès via <code>a.Value</code> lève une <code>InvalidOperationException</code> au lieu d’une <code>NullReferenceException</code> si <code>a</code> est <code>null</code> – vous devriez effectuer la vérification au préalable, c’est-à-dire que si vous avez une autre variable non nullable <code>int b;</code> alors vous devriez faire des affectations comme <code>if (a.HasValue) { b = a.Value; }</code> ou plus court <code>if (a != null) { b = a; }</code>.</p>
</li>
</ul>
<p>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 <code>NullReferenceException</code>.</p>
<p>Plus précisément</p>
<p>Le <code>runtime</code> levant une <code>NullReferenceException</code> signifie <strong>toujours</strong> 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é <em>autrefois</em> initialisée, mais ne l’est <em>plus</em>).</p>
<p>Cela signifie que la référence est <code>null</code>, et vous ne pouvez pas accéder aux membres (tels que m</p>
<p><em>(Réponse tronquée)</em></p>