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。如果是這樣,那意味著你忘了檢查一些東西。