Szukaj…


Wyjaśnienie NullReferenceException

NullReferenceException jest NullReferenceException gdy próbujesz uzyskać dostęp do niestatycznego elementu (właściwości, metody, pola lub zdarzenia) obiektu referencyjnego, ale jest on zerowy.

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.

Debugowanie takiego wyjątku jest dość łatwe: na linii, w której wyjątek jest zgłaszany, wystarczy spojrzeć przed każdym ” . ”lub„ [ ”lub w rzadkich przypadkach” ( „.

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

Skąd pochodzi mój wyjątek? Zarówno:

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

W trybie debugowania wystarczy umieścić kursor myszy na każdym z tych elementów, a znajdziesz referencję zerową. Następnie musisz zrozumieć, dlaczego nie ma ono wartości. Korekta całkowicie zależy od celu twojej metody.

Czy zapomniałeś utworzyć / zainicjować?

myGarage.CarCollection = new Car[10];

Czy powinieneś zrobić coś innego, jeśli obiekt jest pusty?

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

A może ktoś podał ci zerowy argument i nie miał:

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

W każdym razie pamiętaj, że metoda nigdy nie powinna zgłaszać wyjątku NullReferenceException. Jeśli tak, oznacza to, że zapomniałeś coś sprawdzić.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow