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

Оператор ?? называется оператором объединения со значением NULL. Он возвращает левый операнд, если этот операнд не имеет значение 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()
    {
        int? x = null;

        // Set y to the value of x if x is NOT null; otherwise, 
        // if x = null, set y to -1. 
        int y = x ?? -1;

        // Assign i to return value of the method if the method's result 
        // is NOT null; otherwise, if the result is null, set i to the 
        // default value of int. 
        int i = GetNullableInt() ?? default(int);

        string s = GetStringValue();
        // Display the value of s if s is NOT null; otherwise,  
        // display the string "Unspecified".
        Console.WriteLine(s ?? "Unspecified");
    }
}

См. также

Ссылки

Операторы C#

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

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

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

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

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

What Exactly Does 'Lifted' mean?