Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

NullReferenceException

04 Авг 2023

NullReferenceException (NRE) — исключение платформы .NET, возникающее при попытке обращения по нулевой ссылке.

В C# переменные ссылочных типов хранят ссылки на объекты. Ссылка может иметь значение null: в таком случае она не указывает на объект в памяти. null — значение по умолчанию для ссылочных типов.

Рассмотрим простой синтетический пример:

string str = null;
var len = str.Length;
....

Переменная str принимает значение null. Из-за этого при попытке обращения к свойству Length произойдет выброс исключения NullReferenceException.

Часто ошибки не так очевидны. Рассмотрим фрагмент кода из Open Source проекта:

public Palette GlobalPalette
{
  get {....}
  set
  {
    SetTagValue("GlobalPalette", (value != null) ? null : value.Data);
  }
}

Разработчики допустили ошибку при использовании тернарного оператора, перепутав операнды местами. Переменная value проверяется на равенство null. Если value равна null, произойдет попытка обращения к свойству Data. Это приведет к выбросу исключения NullReferenceException, так как value хранит нулевую ссылку.

Правильный вариант вызова метода SetTagValue:

SetTagValue("GlobalPalette", (value != null) ? value.Data : null);

Более подробно причины возникновения NullReferenceException, способы исправления исключений и их предотвращения разбираются в статье "NullReferenceException в C#. Что это такое и как исправить?".

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам