День сорок первый. #ЗаметкиНаПолях
Nullable-типы
Иногда бывают ситуации, когда необходимо чтобы тип значений мог принимать
Запись
Любые операторы, которые определены для значимых типов, также могут быть использованы для nullable-типов. Эти операторы вернут
- не больше и не равно
- также и не меньше
Оператор ?? (null-объединение)
Оператор null-объединения
Источники:
- http://mycsharp.ru/post/47/2014_09_30_znachenie_null_nullable-tipy_operator___.html
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/nullable-types/using-nullable-types
Nullable-типы
Иногда бывают ситуации, когда необходимо чтобы тип значений мог принимать
null
, и это можно сделать, указав знак вопроса ?
после имени типа, при объявлении переменной:int? a = 5;Nullable-типы могут пригодиться при работе с базой данных. Некоторые поля таблицы базы данных могут принимать значение
double? b = null;
bool? c = false;
null
. Запись
?
является упрощенной формой использования структуры System.Nullable<T>
:[System.Serializable]Следующие виды определения переменных будут эквивалентны предыдущим:
public struct Nullable<T> where T : struct
Nullable<int> a = 5;Операторы
Nullable<double> b = null;
Nullable<bool> c = false;
Любые операторы, которые определены для значимых типов, также могут быть использованы для nullable-типов. Эти операторы вернут
null
, если один или оба операнда null
. В противном случае операторы используют содержащиеся значения для расчёта результата. Например:int? a = 10;Для операторов сравнения (
int? b = null;
int? c = 10;
a++; // a = 11
a = a * c; // a = 110
a = a + b; // a = null
<
, >
, <=
, >=
), если один или оба операнда null, результатом будет ложь. Не рассчитывайте на то, что, если определённое сравнение (например, <=
) возвращает ложь, то обратное сравнение (>
) вернёт правду! Например, 10
:- не больше и не равно
null
,- также и не меньше
null
.Оператор ?? (null-объединение)
Оператор null-объединения
??
похож на тернарный оператор. Он имеет следующую структуру:[операнд1] ?? [операнд2];
??
возвращает операнд1
, если тот не равен значению null, иначе возвращает операнд2
.int? a = 1;Левый операнд, который сравнивается со значением null, обязательно должен быть nullable-типа, иначе возникнет ошибка компиляции.
int? b = null;
Console.WriteLine(a ?? 3); // 1
Console.WriteLine(b ?? 3); // 3
Источники:
- http://mycsharp.ru/post/47/2014_09_30_znachenie_null_nullable-tipy_operator___.html
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/nullable-types/using-nullable-types