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