NullReferenceException 解释

当你尝试访问引用对象的非静态成员(属性,方法,字段或事件)但它为 null 时,将引发 NullReferenceException

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.

要调试这样的异常,这很简单:在抛出异常的行上,你只需要在每个’.‘或’[‘之前,或者在极少数情况下’(’。

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

我的异常来自哪里?或者:

  • myGaragenull
  • myGarage.CarCollectionnull
  • currentIndexnull
  • myGarage.CarCollection[currentIndex.Value]null
  • theCarInTheStreetnull

在调试模式下,你只需将鼠标光标放在每个元素上,你就会找到空引用。然后,你要做的就是理解为什么它没有价值。校正完全取决于你的方法的目标。

你忘了实例化/初始化它吗?

myGarage.CarCollection = new Car[10];

如果对象为空,你应该做一些不同的事吗?

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

或者也许有人给你一个空参数,并不应该:

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

无论如何,请记住,方法永远不应该抛出 NullReferenceException。如果是这样,那意味着你忘了检查一些东西。