﻿# NullReferenceException

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

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

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

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

Переменная _str_ принимает значение _null_\. Из\-за этого при попытке обращения к свойству _Length _произойдет выброс исключения _NullReferenceException\._

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

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

Разработчики допустили ошибку при использовании тернарного оператора, перепутав операнды местами_\. _Переменная _value _проверяется на равенство_ null_\. Если _value _равна _null_, произойдет попытка обращения к свойству _Data\. _Это приведет к выбросу исключения _NullReferenceException_, так как _value_ хранит нулевую ссылку_\. _

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

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


> Более подробно причины возникновения \_NullReferenceException\_, способы исправления исключений и их предотвращения разбираются в статье "\[NullReferenceException в C\\\#\\\. Что это такое и как исправить?\]\(https://pvs\-studio\.ru/ru/blog/posts/csharp/1049/\)"\\\.