Есть ли способ узнать, какой объект вызвал исключение NullReferenceException? - PullRequest
6 голосов
/ 08 августа 2011

Есть ли способ найти имя объекта, из-за которого элемент управления попал в блок catch из исключения NullReferenceException, чтобы мы могли легко отлаживать его, выдав предупреждение или зарегистрировав объект, который был нулевым?

Ответы [ 3 ]

9 голосов
/ 08 августа 2011

Нет.
Вы получаете только трассировку стека, включая номера строк.
Это помогает вам в простых случаях, таких как:

var result = myString.Trim();

Но это не помогает в таких строках:

var result = myObj.Method1().Method2();
2 голосов
/ 08 августа 2011

Что является именем объекта ? Для нас, программистов, это маркер времени разработки, который идентифицирует ссылку на объект , но имеет значение только до компиляции.

Некоторые объекты имеют выделенное свойство Name, но это не имеет (и не должно) иметь никакого отношения к имени ссылки на объект в коде; визуальный конструктор любезно называет ссылки на объекты после свойства Name, но это соглашение, а не требование. Кроме того, нулевая ссылка не может иметь свойства Name просто потому, что ссылка null , она еще не назначена ни одному объекту с читаемым именем.

0 голосов
/ 08 августа 2011

Что ж, вы можете посмотреть на трассировку стека, отразить функцию, отобразить параметры и получить догадку , основанную на состоянии стека, но я бы сказал, что на самом деле объект может быть где угодно в функция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...