Операторы объединения с null
Используйте ?? и ??= для задания резервных значений.
«Операторы объединения с null» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Оператор ??
Оператор объединения с null ?? возвращает левый операнд, если он не равен null, иначе — правый операнд. Это краткая запись для выбора запасного значения.
using System;
class Program {
static void Main() {
int? maybe = null;
int value = maybe ?? -1;
Console.WriteLine(value);
}
}?? выбирает первое значение, не равное null
Если левая сторона содержит значение, используется именно оно, а правая сторона игнорируется.
using System;
class Program {
static void Main() {
int? a = 7;
Console.WriteLine(a ?? 0);
}
}?? со ссылочными типами
?? также работает со ссылочными типами, такими как string, и позволяет предоставить текст по умолчанию, если значение равно null.
using System;
class Program {
static void Main() {
string name = null;
Console.WriteLine(name ?? "Guest");
}
}Объединение нескольких операторов ??
Можно объединить несколько запасных вариантов; используется первый из них, который не равен null.
using System;
class Program {
static void Main() {
string a = null, c = "third";
string b = null;
Console.WriteLine(a ?? b ?? c ?? "last");
}
}?? возвращает базовый тип
Когда слева находится int?, а справа — int, результатом является обычный int, поскольку пустое значение уже невозможно.
using System;
class Program {
static void Main() {
int? maybe = null;
int sure = maybe ?? 0;
Console.WriteLine(sure + 5);
}
}Оператор ??=
Оператор присваивания с объединением пустых значений ??= присваивает правую часть только если слева сейчас находится пустое значение.
using System;
class Program {
static void Main() {
int? count = null;
count ??= 10;
Console.WriteLine(count);
}
}??= сохраняет существующие значения
Если переменная уже содержит значение, ??= ничего не делает.
using System;
class Program {
static void Main() {
string config = "custom";
config ??= "default";
Console.WriteLine(config);
}
}Отложенная инициализация с помощью ??=
??= идеально подходит для установки значения при первом обращении и его сохранения в дальнейшем.
using System;
class Program {
static string cache = null;
static string GetData() {
cache ??= "loaded";
return cache;
}
static void Main() {
Console.WriteLine(GetData());
Console.WriteLine(GetData());
}
}?? и GetValueOrDefault
Оба варианта предоставляют значения по умолчанию, но ?? гибче: он работает со ссылочными типами и позволяет использовать в качестве значения по умолчанию любое выражение.
using System;
class Program {
static void Main() {
int? n = null;
Console.WriteLine(n ?? 5);
Console.WriteLine(n.GetValueOrDefault(5));
}
}?? в аргументах методов
Используйте ?? непосредственно в выражении, чтобы указать значение по умолчанию там, где требуется значение.
using System;
class Program {
static void Greet(string name) {
Console.WriteLine("Hello, " + name);
}
static void Main() {
string input = null;
Greet(input ?? "friend");
}
}Поведение с коротким замыканием
Правая часть ?? вычисляется только тогда, когда слева находится пустое значение, подобно механизму короткого замыкания.
using System;
class Program {
static int Compute() {
Console.WriteLine("Computed");
return 42;
}
static void Main() {
int? known = 1;
int result = known ?? Compute();
Console.WriteLine(result);
}
}Быстрая проверка
Проверьте понимание операторов объединения с пустыми значениями.
Итоги
Оператор ?? возвращает левое значение, если оно не является пустым, а в противном случае — правое, и его можно объединять в цепочку. Тип результата перестаёт допускать пустое значение, если указано непустое значение по умолчанию.
??= выполняет присваивание только тогда, когда целевое значение пусто, поэтому идеально подходит для значений по умолчанию и отложенной инициализации. Оба оператора вычисляют правую часть только при необходимости.
Часто задаваемые вопросы
Урок «Операторы объединения с null» бесплатный?
Да — полный текст урока «Операторы объединения с null» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «Операторы объединения с null»?
Используйте ?? и ??= для задания резервных значений. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Операторы объединения с null»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Знакомство с nullable-типами значений
- Свойства HasValue и Value
- Операторы объединения с null
- Nullable в вычислениях