開発者として、私たちはしばしばその例外に遭遇します:NullReferenceException
よく知られているエラーメッセージで:
オブジェクト参照がオブジェクト インスタンスに設定されていません
.NET Frameworkがもう少し意味のあるものを返すことはできませんか?
次のようなもの:
Yという名前のタイプXのオブジェクトがオブジェクトのインスタンスに設定されていません
開発者として、私たちはしばしばその例外に遭遇します:NullReferenceException
よく知られているエラーメッセージで:
オブジェクト参照がオブジェクト インスタンスに設定されていません
.NET Frameworkがもう少し意味のあるものを返すことはできませんか?
次のようなもの:
Yという名前のタイプXのオブジェクトがオブジェクトのインスタンスに設定されていません
オブジェクトには名前がありません-では、どのようにして名前を教えてくれるのでしょうか?null参照が変数からロードされた可能性があります。または、メソッド、プロパティなどによって返された可能性があります。
JITはおそらくスタック情報を調べて、宣言された参照型が何であるかを理解することができますが、これがどのくらいの頻度で役立つかはわかりません。間違いなく、処理が遅くなります。
デバッグに関して、これが大きな負担になるとは言えません。1行でヌルになる可能性のあるものがたくさんある場合は、通常、それらをさらに分割する価値があることを示しています。
私には、これは純粋に好みの問題のように思えます。それがあなたをそれほど悩ませているなら、あなたはいつでもをサブクラス化しNullReferenceException
てメッセージを変えることができます。:)
結局のところ、メッセージが作成されたときに利用できる情報の量です。いくつかの追加情報を手動で渡さずに、内部でnullであったフィールドの名前を決定するだけでは、NullReferenceException
リフレクション(おそらくかなりの量)が必要になります。これはかなり負荷の高い操作です。たとえば、ArgumentNullException
メッセージが問題のあるパラメータ名を示しているものをスローするには、それを呼び出すときに文字列を渡す必要がありますthrow new ArgumentNullException("param1")
。
例外メッセージの詳細レベルは、それを定義するプログラマー次第ですが、例外をスローするときにシステムを集中的に使用することは避けるのが賢明です。
それを言う最も一般的な方法だからです。