NullReferenceException

NullReferenceException

# Spiegazione di NullReferenceException

Un NullReferenceException viene generato quando si tenta di accedere a un membro non statico (proprietà, metodo, campo o evento) di un oggetto di riferimento ma è nullo.

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.

Per eseguire il debug di tale eccezione, è abbastanza semplice:sulla riga in cui viene generata l'eccezione, devi solo guardare prima di ogni '. ' o '[ ', o in rare occasioni '( '.

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

Da dove viene la mia eccezione? O:

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

In modalità debug, devi solo posizionare il cursore del mouse su ciascuno di questi elementi e troverai il tuo riferimento nullo. Quindi, quello che devi fare è capire perché non ha un valore. La correzione dipende totalmente dall'obiettivo del tuo metodo.

Hai dimenticato di istanziarlo/inizializzarlo?

myGarage.CarCollection = new Car[10];

Dovresti fare qualcosa di diverso se l'oggetto è nullo?

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

O forse qualcuno ti ha dato un argomento nullo e non avrebbe dovuto:

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

In ogni caso, ricorda che un metodo non dovrebbe mai generare una NullReferenceException. Se lo fa, significa che hai dimenticato di controllare qualcosa.