Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharpNotesForProfessionals.pdf
Скачиваний:
57
Добавлен:
20.05.2023
Размер:
6.12 Mб
Скачать

Chapter 77: NullReferenceException

Section 77.1: NullReferenceException explained

A NullReferenceException is thrown when you try to access a non-static member (property, method, field or event) of a reference object but it is null.

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.

To debug such an exception, it's quite easy: on the line where the exception is thrown, you just have to look before every '.' or '[', or on rare occasions '('.

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

Where does my exception come from? Either:

myGarage is null

myGarage.CarCollection is null

currentIndex is null

myGarage.CarCollection[currentIndex.Value] is null

theCarInTheStreet is null

In debug mode, you only have to put your mouse cursor on every of these elements and you will find your null reference. Then, what you have to do is understand why it doesn't have a value. The correction totally depends on the goal of your method.

Have you forgotten to instantiate/initialize it?

myGarage.CarCollection = new Car[10];

Are you supposed to do something di erent if the object is null?

if (myGarage == null)

{

Console.WriteLine("Maybe you should buy a garage first!");

}

Or maybe someone gave you a null argument, and was not supposed to:

if (theCarInTheStreet == null)

{

throw new ArgumentNullException("theCarInTheStreet");

}

In any case, remember that a method should never throw a NullReferenceException. If it does, that means you have forgotten to check something.

GoalKicker.com – C# Notes for Professionals

463