0Pricing
C# Academy · Урок

Операторы объединения с 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 — локальная установка не требуется.

Все уроки этого курса

  1. Знакомство с nullable-типами значений
  2. Свойства HasValue и Value
  3. Операторы объединения с null
  4. Nullable в вычислениях
← Назад к C# Academy