NullReferenceException

# NullReferenceException の説明

NullReferenceException 参照オブジェクトの非静的メンバー (プロパティ、メソッド、フィールド、またはイベント) にアクセスしようとするとスローされますが、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.

このような例外をデバッグするのは非常に簡単です:例外がスローされた行で、すべての '. の前を調べるだけです。 ' または '[ '、またはまれに '( '.

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

例外はどこから来るのですか?いずれか:

  • myGarage null です
  • myGarage.CarCollection null です
  • currentIndex null です
  • myGarage.CarCollection[currentIndex.Value] null です
  • theCarInTheStreet null です

デバッグ モードでは、これらすべての要素にマウス カーソルを置くだけで、null 参照が見つかります。次に、なぜ価値がないのかを理解する必要があります。修正は、メソッドの目的に完全に依存します。

インスタンス化/初期化するのを忘れていませんか?

myGarage.CarCollection = new Car[10];

オブジェクトが null の場合、別のことをすることになっていますか?

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

または、誰かがあなたに無効な引数を与えたのかもしれません:

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

いずれにせよ、メソッドが NullReferenceException をスローしてはならないことに注意してください。もしそうなら、それはあなたが何かをチェックするのを忘れていることを意味します.