Что такое "??" оператор в С#?
Возможный дубликат:
Что такое "??" оператора для?
Что означает "??" оператор выполняет в выражении?
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
?? является нулевым коалесцирующим оператором
Читайте об этом здесь:
текст ссылки