Приветствую всех. Сегодня поговорим об обобщенной структуре Nullable<T> которая является дженерик классом. Бывают случаи при работе с базами данных или во время парсинга, необходимо возвращать значению null, но в сишарпе значения null могут возвращать только ссылочные типы. Вот для таких случаев и используют структура Nullable<T>. Т в данном случаи означает универсальный параметр, который будет автоматически подставлен компилятором.
Тип Nullable<T> представляет типы значений с пустыми (нулевыми) значениями.
1 2 |
int? a = null; int? b = a + 4; |
При сравнении операндов один из которых null — результатом сравнения всегда будет — false
Рассмотрим простейший пример:
1 2 |
int? n = null; Console.WriteLine (n == null); // True |
В данном примере использован оператор ? после типа, перед объявлением переменной, говорит компилятору что мы создали ссылку на класс Nullable<T>. И в данном случаи он воспринимает это как:
1 |
Nullable<int> n = new Nullable<int>(); |
Своего рода он создает обертку, в ссылочный тип, и теперь мы можем манипулировать этим значением как ссылкой.
Все типы Nullable<T> имеют лишь два свойства Value, которое имеет значение объекта, и HasValue, которое возвращает true, если объект Nullable хранит значение. Однако стоит запомнить что свойство Value хранит значение которое было типизировано Nullable.
Преобразование типов в Nullable<T>, происходит таким же способом как и при значениях, обычным кастом.
Операция поглощения:
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