Посилання на об’єкт не вказує на екземпляр об’єкта що це значить

При налагодженні коду, написаного на ряді мов програмування (Visual Studio, Pascal та інших) програміст може отримати повідомлення «Посилання на об’єкт не вказує на екземпляр об’єкта». Зазвичай це означає, що програма намагається звернутися до об’єкта, яка не инициализирован (об’єкту не задано значення), і замість значення об’єкта видно нуль (null). Давайте розберемо суть і способи вирішення виниклої проблеми.

Що означає «Посилання на об’єкт не вказує на екземпляр об’єкта»?

Як ми вже пояснювали вище, виникнення даної помилки пов’язано з так званої «нульової посиланням». Коли значень будь-якого з об’єктів коду не задано, і програма замість даного значення бачить нуль.

Помилка «нульовий посилання» складають значну частину в числі всіх помилок додатків. Зазвичай це проста проблема, викликана відсутністю додаткової логіки в програмі, яка передбачає наявність допустимих значень для всіх наявних в ній об’єктів.

Ви також можете зіткнутися з виключенням нульовий посилання в ситуації, коли будь-який з типів об’єктів є нулем. Наприклад, у наведеному нижче коді об’єкт SqlCommand ніколи не ініціалізується. Відсутність SQL-запиту може стати серйозною проблемою для вашого застосування. Іноді нульову рядок можна просто проігнорувати, і рухатися далі. В інших же випадках, як і у випадку з SqlCommand, це може стати фатальною помилкою, ігнорувати яку не представляється можливим.

В даному уривку об’єкт SqlCommand ніколи не ініціалізується

Це цікаво: Як можна виправити HTTP ERROR 500.

Використання умовного оператора Null для уникнення NullReferenceExceptions

Одним з кращих нових доповнень до C # є нульовою умовний оператор. Замість божевільного кількості перевірок типу «variable! = Null», можна використовувати «», Ваш код зробить невелике коло, і поверне нуль замість того, щоб видати виняток. Написане матиме більше сенсу в прикладі нижче:

Приклад такого коду

Об’єднання нулів щоб уникнути NullReferenceExceptions

Ще одна чудова особливість – об’єднання нулів (null coalescing), яке є оператором «??». Це прекрасно працює в разі отримання значення за замовчуванням для змінної, яка є нулем. Це працює зі всіма типами даних, які можуть бути обнуляється. Наступний код генерує виняток без об’єднання нулів. Додавання “?? new List<string>() »Запобігає виключення« Посилання на об’єкт не вказує на екземпляр об’єкта ».

Приклад запобігання виключення

Прості приклади нульових значень, що викликають проблеми

Найбільш поширеними причинами помилка помилки «Посилання на об’єкт не вказує на екземпляр об’єкта» є невірні настройки, виклики бази даних, а також виклики типу API, що не повертають очікувані значення.

Наприклад, ви додаєте нове поле в свою базу даних, і не заповнюєте значення за замовчуванням для кожного запису. Довільно запитуються записи, при цьому даний код не враховує, що нове поле – нуль. Відповідно, виникає і розглянута нами помилка.

Читайте також: що за помилка ERR_NETWORK_CHANGED.

Як виправити дисфункцію, коли посилання на необхідний об’єкт не вказує на екземпляр об’єкта

Вже згадана проблема може бути вирішена додаванням логіки і коду, що дозволяють гарантувати, що об’єкти не є нулями. Поради, що дозволяють позбутися від помилки зводяться приблизно до наступного:

  • Ініціалізуйте змінні з допустимими значеннями;
  • Якщо змінна може бути нульовою, то перевірте код на нулі, і обробіть його відповідним чином;
  • Використовуйте оператор? з методами, коли можливо. stringvar? .ToUpper ();
  • Застосовуйте інструменти рівня «Resharper» для виявлення потенційних нульових посилань.

Буде цікаво дізнатися: як виправити ERR_FILE_NOT_FOUND.

висновок

У статті ми розібрали, що означає «Посилання на об’єкт не вказує на екземпляр об’єкта», в яких ситуаціях вона з’являється, і як її виправити. Перевіряйте об’єкти на наявність заданих значень, використовуйте «Resharper», і розглянута нами помилка перестане вам докучати.

Ссылка на основную публикацию