System.NullReferenceException

どんなエラー?

インスタンスが生成されていない状態で参照した場合に起こるエラー。本番コードで発生することはまずないが、もしも本番環境で出力されたのであれば、単体テストからやり直したほうがいいという致命的なエラーともいえる。自分自身、本番環境でこのエラーが出て椅子から転げ落ちそうになった経験あり。こういったミスをなくすためにも、「変数は使用する直前で宣言する」のはとても大切なことだと思う。いまだに、メソッド書き出しの直後に変数の宣言がされているプログラムを見ると、かなりげんなり(※1)する。

※1 かつ、変数が変な短縮名称やスネーク(xxx_yyyみたいな)していると、さらにやる気が激減するので本当にやめてほしい。

対応方法

まずはメソッドの振る舞いのレベルから見直す。おそらく、こういったエラーが残るようなスパゲッティ状態になっているはず。短いメソッドであれば、コーディングの中で見逃すはずがないし、デバッグレベルで検出されるはずだからだ。

上記と矛盾するが、無理にコードを短くしようとしすぎて、インスタンスそのものを引数としていないか見直す。メソッド内で、引数のインスタンス内の一部のプロパティを使用するのだが、めんどくさがってインスタンスそのものを渡している形になっていないだろうか。こういったつくりの場合は、ユニットテストでは検出されないことがある。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です