Что такое "??" оператор в С#?

Возможный дубликат:
Что такое "??" оператора для?

Что означает "??" оператор выполняет в выражении?

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}

Ответы

Ответ 1

Это называется оператором с нулевым коалесцированием, и он действует следующим образом: предположим, что a - это значение с нулевым значением int, а b - нормальный int

b = a ?? 1;

равно

b = (a != null ? (int)a : 1);

который равен

if(a != null)
    b = (int)a;
else
    b = 1;

Поэтому

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}
Расширение

должно выглядеть примерно так:

public NameValueCollection Metadata
{
    get
    {
        if(metadata == null)
            return (metadata = new NameValueCollection());
        else
            return metadata;
    }
}

который является своего рода однолинейным однолинейным паттерном, потому что геттер возвращает метаданные (инициализированный объект NameValueCollection) каждый раз, когда он запрашивается, ожидает в первый раз, когда он null в этой точке, поэтому он инициализирует его, а затем возвращает его, Это не в тему, но обратите внимание, что этот подход к одноэлементному шаблону не является потокобезопасным.

Ответ 2

?? Оператор (ссылка на С#)

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

Ваш пример можно переписать как:

public NameValueCollection Metadata
  {
    get { 
          if (metadata == null)
              metadata = new NameValueCollection();

          return metadata;
         }
  }

Ответ 3

Из MSDN: http://msdn.microsoft.com/en-us/library/ms173224.aspx

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

  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");
}

}

Ответ 4

Используется для замены значения по умолчанию в случае переменной NULL.

X =  (if Y is not null return Y) ?? (else return DEFAULT)

Прочитайте подробное обсуждение Насколько полезно С#? оператор?

Ответ 5

Это оператор coalesce, он проверяет значение null.

statement ?? fallback Если выражение принимает значение null, используется fallback. См. msdn.

Ответ 6

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

http://msdn.microsoft.com/en-us/library/ms173224.aspx

Ответ 7

?? является нулевым коалесцирующим оператором

Читайте об этом здесь: текст ссылки