← Все вопросы
Как работают операторы ?? и ?. в C# (null-coalescing и null-conditional)?
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
Ваш ответ
Войдите, чтобы ответить на вопрос.