Приветствую всех, сегодня затронем коротенькую тему о типе 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