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

Оператор возвращает левый операнд, если он не равен null; в противном случае – правый.
var result = left ?? right;
leftнеnull→result == left- На слоттика рабочее зеркало вы найдёте обзоры и стратегии для побед.
leftnull→result == 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 ?? b ≈ a != null ? a : b |
Подводные камни
- Работает только с nullable типами – обычный
intнельзя проверить через??. - Short‑circuit может экономить ресурсы:
cachedValue ?? ComputeExpensiveResult(). - Не перегружать – это встроенный синтаксис, переопределить нельзя.
- При смешении 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.
