0 голосов
спросил от в категории ASPNETMVC
Это одна из наиболее распространенных проблем, которые мы задаем, и это тоже тот, на который мы меньше всего отвечаем, но вы больше всего можете ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - это означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете для хранения пера. Если вы окажетесь в кармане и обнаружите, что там нет пера, вы не можете подписать свое имя на листе бумаги - и вы получите очень забавные взгляды, если попробуете! Пустой карман дает вам нулевое значение (здесь нет пера!), Поэтому вы не можете делать ничего, что вы обычно делали бы после того, как вы извлекли бы перо. Почему он пуст? Это вопрос - возможно, вы забыли забрать перо, когда утром вы покинули дом, или, возможно, вы оставили перо в кармане вчерашней рубашки, когда вы сняли его прошлой ночью.

Мы не можем сказать, потому что нас там не было, и что еще более важно, мы даже не можем видеть вашу рубашку, а тем более то, что находится в кармане!
br> Вернемся к компьютерам, и вы сделали то же самое, как-то - и мы не можем видеть ваш код, а тем более запустить его и выяснить, что содержит null, когда это не должно быть.
br> Но вы можете - и Visual Studio поможет вам здесь. Запустите свою программу в отладчике, и когда она не удастся, VS покажет вам, в какой строке она находила проблему. Затем вы можете посмотреть на различные части, чтобы узнать, какое значение имеет значение null, и начать оглядываться назад через свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибок, и запустите свою программу с самого начала. На этот раз VS остановится перед ошибкой и позволит вам изучить, что происходит, перейдя код, глядя на ваши значения. Но мы не можем этого сделать -у нас нет вашего кода, мы не знаем, как его использовать, если у нас его есть, у нас нет ваших данных. Поэтому попробуйте - и посмотрите, сколько информации вы можете узнать!

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Вы не указали, где выбрано исключение с сообщением «Ссылка на объект, не установленное на экземпляр объекта».

беспокоиться. Это один из самых простых случаев для обнаружения и исправления. Это просто означает, что некоторый член/переменная некоторого ссылочного типа является разыменованием с использованием и его экземпляров (нестатических), которые требуют, чтобы этот член/переменная был непустым, но на самом деле он кажется нулевым. Просто выполните его в отладчике, он остановит выполнение, в котором вызывается исключение. Поместите точку останова на эту строку, перезапустите приложение и снова перейдите к этой точке. Оцените все ссылки, участвующие в следующей строке, и посмотрите, какая из них является нулевой, в то время как она должна быть не нулевой. После того, как вы это выясните, исправьте код: либо убедитесь, что элемент/переменная правильно инициализирован для ненулевой ссылки, либо проверьте его на значение null, а в случае null сделайте что-то еще.

См. также: #want to display next record on button click. but got an error in if condition of next record function "object reference not set to an instance of an object" #.

Иногда вы не можете сделать это в отладчике по той или иной причине. Один действительно неприятный случай, когда проблема проявляется только в том случае, если программное обеспечение создано, когда отладочная информация недоступна. В этом случае вам придется использовать более жесткий путь. Во-первых, вам нужно убедиться, что вы никогда не блокируете распространение исключений, обрабатывая их молча (это преступление разработчиков против самих себя, но очень обычное). Вам нужно полностью исключить все исключения в самой верхней кадре стека для каждого потока. Вы можете сделать это, если обрабатываете исключения типа System.Exception . В обработчике вам необходимо записать всю информацию об исключениях, особенно System.Exception.StackTrace :
#http://msdn.microsoft.com/en-us/library/system.exception.aspx #,
2 ####.

Трассировка стека - это всего лишь строка, показывающая полный путь распространения исключений из инструкции throw для обработчика. Читая его, вы всегда можете найти концы. Для ведения журнала лучше всего (в большинстве случаев) использовать класс System.Diagnostics.EventLog :
#http://msdn.microsoft.com/en-us/library/system.diagnostics.eventlog.aspx #.

Удачи,
? SA

Категории

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

Связанных вопросов не найдено

...