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;
我的异常来自哪里?或者:
myGarage
是null
myGarage.CarCollection
是null
currentIndex
是null
myGarage.CarCollection[currentIndex.Value]
是null
theCarInTheStreet
是null
在调试模式下,你只需将鼠标光标放在每个元素上,你就会找到空引用。然后,你要做的就是理解为什么它没有价值。校正完全取决于你的方法的目标。
你忘了实例化/初始化它吗?
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。如果是这样,那意味着你忘了检查一些东西。