Тип Nullable и Операция поглощения

Приветствую всех, сегодня затронем коротенькую тему о типе Nullable.

Ссылочные типы могут представлять несуществующее значение с помощью ссылки null. Однако типы значений не способны представлять значения null обычным образом.

Например:

string st=null; //тут все нормально, ссылочному типу можно присвоить null

int i=null; // Возникнет ошибка на стадии компиляции,
// так как тип int является структурным типом, а не ссылочным.

Чтобы представить null с помощью типа значения, необходимо использовать специальную конструкцию, которая называется типом, допускающим значения null. Тип, допускающий значения null , обозначается как тип значения, за которым следует знак ?

int ? i=null;//теперь ошибки не будет.

Структура Nullable<T>

Является неизменяемой структурой, которая имеет только два поля, предназначенные для представления значения(Value) и признака наличия значения(HasValue).

Рассмотрим пример преобразования типов, допускающих значение null;

int ? x=5; // неявное
int y=(int)x; //явное

Тип Nullable<T> представляет типы значений с пустыми (нулевыми) значениями.

 int? a = null;
 int? b = a + 4;
 Console.WriteLine(b); //b=null;

При сравнении операндов один из которых null — результатом сравнения всегда будет — false

Операция поглощения:

Или его еще называют оператором интеграции null (null-coalescing operator) Он обозначается знаком ?? и принимает два операнда.

static void Main()
{
int? a = null;
int? b;
b = a ?? 10; // b = 10
a = 3;
b = a ?? 10; // b = 3
}

Оператор ?? возвращает левый операнд, если он не null и правый операнд, если левый null

Оператор интеграции null очень удобен для задания значения переменной по умолчанию.

Основное преимущество этого оператора — поддержка как ссылочных типов, так и значимых типов, допускающих присвоение null

Обновлено: 23.03.2018 — 11:59

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.