Приветствую всех, сегодня затронем коротенькую тему о типе Nullable.
Ссылочные типы могут представлять несуществующее значение с помощью ссылки null. Однако типы значений не способны представлять значения null обычным образом.
Например:
1 2 3 4 |
string st=null; //тут все нормально, ссылочному типу можно присвоить null int i=null; // Возникнет ошибка на стадии компиляции, // так как тип int является структурным типом, а не ссылочным. |
Чтобы представить null с помощью типа значения, необходимо использовать специальную конструкцию, которая называется типом, допускающим значения null. Тип, допускающий значения null , обозначается как тип значения, за которым следует знак ?
1 |
int ? i=null;//теперь ошибки не будет. |
Структура Nullable<T>
Является неизменяемой структурой, которая имеет только два поля, предназначенные для представления значения(Value) и признака наличия значения(HasValue).
Рассмотрим пример преобразования типов, допускающих значение null;
1 2 |
int ? x=5; // неявное int y=(int)x; //явное |
Тип Nullable<T> представляет типы значений с пустыми (нулевыми) значениями.
1 2 3 |
int? a = null; int? b = a + 4; Console.WriteLine(b); //b=null; |
При сравнении операндов один из которых null — результатом сравнения всегда будет — false
Операция поглощения:
Или его еще называют оператором интеграции null (null-coalescing operator) Он обозначается знаком ?? и принимает два операнда.
1 2 3 4 5 6 7 8 |
static void Main() { int? a = null; int? b; b = a ?? 10; // b = 10 a = 3; b = a ?? 10; // b = 3 } |
Оператор ?? возвращает левый операнд, если он не null и правый операнд, если левый null
Оператор интеграции null очень удобен для задания значения переменной по умолчанию.
Основное преимущество этого оператора — поддержка как ссылочных типов, так и значимых типов, допускающих присвоение null