0 голосов
спросил от в категории VBASPNETVBNET
Вся идея плохая. Конечно, вы должны инициализировать listr . Но тогда идея вернуть его из функции неверна. Если ваша функция используется в том же экземпляре того же класса, у вас уже есть этот экземпляр, и если вы вызываете эту функцию извне, к чему вы добавляете? Вы должны добавить что-то в экземпляр коллекции, который уже известен вызывающему. Даже если вы создадите экземпляр коллекции внутри вызова, это было бы неправильно. Другими словами, вам нужно переосмыслить свой интерфейс, предоставляемый вашим классом, а не только реализацию.

Конечно, не только listr может быть нулевым, но также std . Вам нужно выяснить это самостоятельно. Вы не можете задавать такие вопросы каждый раз, когда возникает такая ситуация. Вы не указали, где выбрано исключение с сообщением «Ссылка на объект, не установленная на экземпляр объекта».

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

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

...