5

開発者として、私たちはしばしばその例外に遭遇します:NullReferenceExceptionよく知られているエラーメッセージで:

オブジェクト参照がオブジェクト インスタンスに設定されていません

.NET Frameworkがもう少し意味のあるものを返すことはできませんか?

次のようなもの:

Yという名前のタイプXのオブジェクトがオブジェクトのインスタンスに設定されていません

4

3 に答える 3

15

オブジェクトには名前がありません-では、どのようにして名前を教えてくれるのでしょうか?null参照変数からロードされた可能性があります。または、メソッド、プロパティなどによって返された可能性があります。

JITはおそらくスタック情報を調べて、宣言された参照型が何であるかを理解することができますが、これがどのくらいの頻度で役立つかはわかりません。間違いなく、処理が遅くなります。

デバッグに関して、これが大きな負担になるとは言えません。1行でヌルになる可能性のあるものがたくさんある場合は、通常、それらをさらに分割する価値があることを示しています。

于 2010-01-14T16:30:46.813 に答える
2

私には、これは純粋に好みの問題のように思えます。それがあなたをそれほど悩ませているなら、あなたはいつでもをサブクラス化しNullReferenceExceptionてメッセージを変えることができます。:)

結局のところ、メッセージが作成されたときに利用できる情報の量です。いくつかの追加情報を手動で渡さずに、内部でnullであったフィールドの名前を決定するだけでは、NullReferenceExceptionリフレクション(おそらくかなりの量)が必要になります。これはかなり負荷の高い操作です。たとえば、ArgumentNullExceptionメッセージが問題のあるパラメータ名を示しているものをスローするには、それを呼び出すときに文字列を渡す必要がありますthrow new ArgumentNullException("param1")

例外メッセージの詳細レベルは、それを定義するプログラマー次第ですが、例外をスローするときにシステムを集中的に使用することは避けるのが賢明です。

于 2010-01-14T16:36:11.437 に答える
1

それを言う最も一般的な方法だからです。

于 2010-01-14T16:30:40.427 に答える