C# Language NullReferenceException expliqué


Exemple

Une NullReferenceException est NullReferenceException lorsque vous essayez d'accéder à un membre non statique (propriété, méthode, champ ou événement) d'un objet de référence, mais qu'il est nul.

Car myFirstCar = new Car();
Car mySecondCar = null;
Color myFirstColor = myFirstCar.Color; // No problem as myFirstCar exists / is not null
Color mySecondColor = mySecondCar.Color; // Throws a NullReferenceException 
// as mySecondCar is null and yet we try to access its color.

Pour déboguer une telle exception, c'est assez simple: sur la ligne où l'exception est lancée, il suffit de regarder avant chaque exception . 'ou' [ ', ou à de rares occasions' ( '.

myGarage.CarCollection[currentIndex.Value].Color = theCarInTheStreet.Color;

D'où vient mon exception? Non plus:

  • myGarage est null
  • myGarage.CarCollection est null
  • currentIndex est null
  • myGarage.CarCollection[currentIndex.Value] est null
  • theCarInTheStreet est null

En mode débogage, il vous suffit de placer le curseur de la souris sur chacun de ces éléments et vous trouverez votre référence null. Ensuite, vous devez comprendre pourquoi il n’a pas de valeur. La correction dépend totalement du but de votre méthode.

Avez-vous oublié d'instancier / initialiser?

myGarage.CarCollection = new Car[10];

Êtes-vous censé faire quelque chose de différent si l'objet est nul?

if (myGarage == null)
{
    Console.WriteLine("Maybe you should buy a garage first!");
}

Ou peut-être que quelqu'un vous a donné un argument nul et n'était pas censé:

if (theCarInTheStreet == null)
{
    throw new ArgumentNullException("theCarInTheStreet");
}

Dans tous les cas, rappelez-vous qu'une méthode ne doit jamais lancer une exception NullReferenceException. Si c'est le cas, cela signifie que vous avez oublié de vérifier quelque chose.