TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #52 628
День сорок первый. #ЗаметкиНаПолях
Nullable-типы
Иногда бывают ситуации, когда необходимо чтобы тип значений мог принимать null, и это можно сделать, указав знак вопроса ? после имени типа, при объявлении переменной:
int? a = 5;
double? b = null;
bool? c = false;
Nullable-типы могут пригодиться при работе с базой данных. Некоторые поля таблицы базы данных могут принимать значение 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;
int? b = null;
Console.WriteLine(a ?? 3); // 1
Console.WriteLine(b ?? 3); // 3
Левый операнд, который сравнивается со значением null, обязательно должен быть nullable-типа, иначе возникнет ошибка компиляции.

Источники:
-
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
  • 👍 2
More from @netdeveloperdiary
  1. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  2. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  3. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  4. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  5. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →