Ricerca…


Spiegazione di NullReferenceException

Viene generata una NullReferenceException 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 questa eccezione, è abbastanza semplice: sulla riga in cui viene lanciata l'eccezione, è sufficiente 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à di debug, devi solo posizionare il cursore del mouse su ognuno di questi elementi e troverai il tuo riferimento null. 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 lanciare una NullReferenceException. Se lo fa, significa che hai dimenticato di controllare qualcosa.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow