?? Оператор (Справочник по C#)

Обновлен: Ноябрь 2007

Оператор ?? называется оператором, поддерживающим значение NULL, и используется для определения значения по умолчанию для нулевых типов значений, а также для ссылочных типов. Он возвращает левый операнд, если он не имеет значения NULL, в противном случае возвращает правый операнд.

Заметки

Допускающий значение NULL тип может содержать значение или его значение может быть не определено. Оператор ?? определяет значение по умолчанию, которое будет возвращаться в том случае, если допускающему значение NULL типу будет присвоено любое другое значение. Если попытаться присвоить не допускающему значение NULL типу тип, допускающий значение NULL, без использования оператора ??, то будет сгенерирована ошибка времени компиляции. Если используется приведение типов и допускающий значение NULL тип в данный момент не определен, то будет выдано исключение InvalidOperationException.

Дополнительные сведения см. в разделе Типы, допускающие значения NULL (руководство по программированию на C#).

Результат оператора ?? не может рассматриваться как константа, даже если оба его аргумента являются константами.

Пример

class NullCoalesce
{
    static int? GetNullableInt()
    {
        return null;
    }

    static string GetStringValue()
    {
        return null;
    }

    static void Main()
    {
        // ?? operator example.
        int? x = null;

        // y = x, unless x is null, in which case y = -1.
        int y = x ?? -1;

        // Assign i to return value of method, unless
        // return value is null, in which case assign
        // default value of int to i.
        int i = GetNullableInt() ?? default(int);

        string s = GetStringValue();
        // ?? also works with reference types. 
        // Display contents of s, unless s is null, 
        // in which case display "Unspecified".
        Console.WriteLine(s ?? "Unspecified");
    }
}

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Операторы C#

Типы, допускающие значения NULL (руководство по программированию на C#)

Другие ресурсы

Справочник по C#

Что именно означает "ликвидирован"?