鳩丸ぐろっさり (用語集)

bakera.jp > 鳩丸ぐろっさり (用語集) > オブジェクト参照がオブジェクト インスタンスに設定されていません。

用語「オブジェクト参照がオブジェクト インスタンスに設定されていません。」について

オブジェクト参照がオブジェクト インスタンスに設定されていません。 (オブジェクトさんしょうがおぶじぇくといんすたんすにせっていされていません)

話題 : プログラミング

.NET Framework のアプリケーションを実行したときに発生する例外 NullReferenceException の日本語メッセージ。このメッセージを読むよりも、例外の名称である "NullReferenceException" の意味を考えた方が 30倍くらい分かりやすいと思いますが、要するに null を参照しようとして例外が発生しています。

もう少し具体的に言うと、インスタンスが必要なメソッドやプロパティを呼び出そうとしたときに、インスタンスが null 参照になっているとこの例外が発生します。たとえば、C# で書かれたこんなコードがあったとします。

string foo = "TEST";
string bar = foo.ToLower();
Console.Write(bar);

これを実行すると "test" と表示されるわけですが、これがたとえば以下のようになっていたとします。

string foo = null;
string bar = foo.ToLower();
Console.Write(bar);

これはコンパイルできるのですが、いざ実行すると、foo.ToLower() を実行しようとしたところで例外がスローされます。

そして、「ハンドルされていない例外 : System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。」と言われるわけです。

この場合は foo が null 参照であり、その foo の ToLower() メソッドを呼び出そうとして例外が発生しているわけです。

もちろん普通は foo=null を指定したすぐ後で ToLower() するようなコードは書きませんが、戻り値が null になっていたりするとハマることがあります。たとえば、XML のある要素の属性値を取得しようとして以下のように書くと……。

string attrvalue = doc.GetElementById("foo").Attributes["bar"].Value;

これはうまく行くこともありますが、GetElementById("foo") の戻り値が null だったり、Attributes["bar"] が null だったりするとやはり NullReferenceException が発生してしまいます。

最近の日記

関わった本など