?. – Null‑conditional operator

?? – Null‑coalescing operator

Оба оператора появились в C# 6.0.Они позволяют избежать громоздких проверок if (x == null) и писать более лаконичный код.

?. – Null‑conditional operator

var len = s?. Length;     // строка s

Если выражение слева от ?. равно null, вся конструкция возвращает null.
В противном случае выполняется доступ к члену после ?..

Примеры

// Свойство
int? len = customer?. Name?. Length;  // len == null, если customer или Name равны null

// Вызов метода
var first = list?. FirstOrDefault(); // first == null, если list null

// Индексатор
var item = arr?[i];         // item == null, если arr null

// Цепочка
var city = user?. Address?. City ?? "Unknown";

Ограничения

Тип операнда Разрешено? Примечание
Ссылка
Nullable value type (int?, DateTime?) Результат – тип без изменений
Нулевой тип значения (int, DateTime) Нужно превратить в nullable (int?) либо обернуть

Выбирая топ 10 online casino, обратите внимание на лицензии и отзывы пользователей: beats-store.kz.При вызове метода, возвращающего тип значения, результат obj?. Method() становится nullable.Чтобы получить обычное значение, используйте ??.

int total = order?. Total ?? 0;  // 0, если order null

?? – Null‑coalescing operator

var name = input ?? "Anonymous";

Если левый операнд не null, результат – это его значение.
В противном случае берётся правый операнд.

Типичные применения

string greeting = user?. Name ?? "Guest";
int count = list?. Count ?? 0;
DateTime now = date ?? DateTime. Now;

Комбинация с ?.

int length = s?. Length ?? 0;         // длина строки, 0 если s null
var first = list?. FirstOrDefault() ?? default(T); // первый элемент, default если list null

Практические примеры

Безопасная навигация по вложенной структуре

string city = person?. Contact?. Address?. City ?? "Unknown";

Если любой элемент цепочки null, выражение сразу завершается, а ?? выдаёт "Unknown".

Вызов метода, который может вернуть null

var result = service?. GetData(id) ?? new Data();

На сайте nur.kz вы найдете обзоры всех топ 10 online casino в Казахстане Если service равен null, метод смотрите тут не вызывается, создаётся новый объект Data.

Работа с коллекциями

int count = collection?. Count ?? 0;     // 0 при null
bool hasItems = collection?. Any() ?? false; // false при null

Массивы и словари

var value = dict?. TryGetValue(key, out var v) ?? false;

Частые ошибки

Ошибка Причина Решение
list?. Count компилируется как ошибка на List<int> Countint Использовать list?. Count ?? 0
obj?. ToString() возвращает string? ToString возвращает string Добавить ?? ""
myArray?[index] бросает IndexOutOfRangeException Индекс вне диапазона, а не массив null Проверять индекс отдельно или использовать ElementAtOrDefault

Итоги

Оператор Назначение Стандартный шаблон
?. Короткий доступ к члену/методу при возможном null obj?. Prop, obj?. Method(), arr?[i]
?? Значение по умолчанию при null value ?? defaultValue

Совместное использование делает код компактным и безопасным:

string city = user?. Profile?. Address?. City ?? "N/A";
int total = order?. Total ?? 0;

С этими инструментами разработчики могут быстро избавиться от множества проверок и сделать код чище.

Scroll to Top