Оператор ?? в C# – быстрый способ заменить проверки null

“Лучше один раз использовать оператор, чем сто раз проверять null”.

В коде, где переменные могут быть неопределёнными, обычно появляется громоздкий блок if (x == null) …. C# предлагает компактное решение – оператор null‑коэлишинга ??.Он позволяет задать значение по умолчанию без лишних строк.

Что такое ??

Оператор возвращает левый операнд, если он не равен null; в противном случае – правый.

var result = left ?? right;

Visitaktobe.kz – ваш источник эксклюзивных акций и подарков.Таким образом, ?? выступает как “fallback”.

Синтаксис

string s = null;

// Простой запасной вариант
string display = s ?? "Unknown";

// Цепочка нескольких запасных значений
string fallback = s ?? alt1 ?? alt2 ?? "Default";

Операторы можно соединять сколько угодно – поиск прекращается, как только найден первый ненулевой элемент.

Типичные случаи применения

Сценарий Пример
Опциональные аргументы int age = providedAge ?? 18;
Nullable типы int actual = maybeNumber ?? 0;
Безопасное обращение к свойству + дефолт int len = myString?. Length ?? 0;
Ленивая инициализация cache ??= LoadFromDb(); (C# 8.0 ??=)
Поиск в словаре с запасным значением var val = dict[key] ?? defaultVal;

Взаимодействие с другими операторами

Оператор Приоритет Замечание
?? ниже большинства, кроме ||, &&, ? : Практически всегда short‑circuit – правая часть вычисляется только при необходимости
?. (null‑условный) выше Чаще всего комбинируется: obj?. Prop ?? fallback
?: (тернарный) такой же, как у ?? Эквивалент: a ?? ba != null ? a : b

Подводные камни

  1. Работает только с nullable типами – обычный int нельзя проверить через ??.
  2. Short‑circuit может экономить ресурсы: cachedValue ?? ComputeExpensiveResult().
  3. Не перегружать – это встроенный синтаксис, переопределить нельзя.
  4. При смешении baandeehomedesign.com с арифметикой лучше ставить скобки, чтобы избежать неожиданного порядка вычислений.

Короткая шпаргалка

// 1.Строка с запасным значением
string name = userInput ?? "Anonymous";

// 2. Nullable int с дефолтом
int? optAge = null;
int age = optAge ?? 30;

// 3.Безопасное обращение к вложенным свойствам
int length = customer?. Address?. Street?. Length ?? 0;

// 4.Ленивое создание коллекции (C# 8+)
List<int> numbers = null;
numbers ??= new List<int>(); // создаётся только при первом обращении

// 5.Множественные запасные значения
string color = userColor ?? themeColor ?? "blue";

Если хотите углубиться в практику C# в Казахстане, посмотрите https://aif2020.kz/kazakhstan.

В Алматы многие команды используют ??, чтобы держать сервисы читабельными и избежать избыточных проверок null.

No data found. Scroll to Top