← Все вопросы

Как работают операторы ?? и ?. в C# (null-coalescing и null-conditional)?

Задан 18 месяцев назад408 просмотров2 ответа
8

Вижу в коде a ?? b и obj?.Name. Что делают эти знаки вопроса? Как они помогают с проверками на null?

string name = user?.Name ?? "Гость";

2 ответа

15
✓ Принятый ответ — помог автору

Это два разных оператора для борьбы с null:

  • ?. (null-conditional) — если левый операнд null, вся цепочка возвращает null вместо NullReferenceException.
  • ?? (null-coalescing) — возвращает левый операнд, если он не null, иначе правый (значение по умолчанию).
User user = null;

// без ?. это упало бы NullReferenceException
string name = user?.Name;        // name == null, без исключения

// ?? подставляет значение по умолчанию
string safe = user?.Name ?? "Гость"; // "Гость"

Есть ещё ??= (null-coalescing assignment) — присваивает, только если переменная null:

List<int> items = null;
items ??= new List<int>(); // создаст список, т.к. был null
items.Add(1);

И ?[] для индексаторов: array?[0]. Очень удобно для безопасной навигации по цепочкам: order?.Customer?.Address?.City.

6

Один частый сюрприз: ?. с типами-значениями «поднимает» результат в nullable.

List<int> list = null;
int? count = list?.Count; // тип int?, а не int! значение null

Если нужно число с дефолтом — добавьте ??:

int count = list?.Count ?? 0; // 0, если list == null

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект