Можно создать дубликат:
What is the “??” operator for?Что такое «??» оператор в C#?
Что делает "??" оператор выполняет в выражении?
public NameValueCollection Metadata
{
get { return metadata ?? (metadata = new NameValueCollection()); }
}
Можно создать дубликат:
What is the “??” operator for?Что такое «??» оператор в C#?
Что делает "??" оператор выполняет в выражении?
public NameValueCollection Metadata
{
get { return metadata ?? (metadata = new NameValueCollection()); }
}
Это называется оператором нуль-коалесценции и он действует следующим образом, предположим, что a
является обнуляемым INT и b
является нормальным ИНТ
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 в этой точке, поэтому он инициализирует его и затем возвращает его. Это не в тему, но обратите внимание, что этот подход к одноэлементному шаблону не является потокобезопасным.
Это коалесцирующий оператор, он проверяет наличие нулевого значения.
statement ?? fallback
если оператор оценивает null
, fallback
используется. См. msdn.
?? является нулевой коалесцирующий оператор
Читайте об этом здесь: link text
?? оператор называется оператором нулевой коалесценции и используется для определения значения по умолчанию для типов нулевых значений , а также типов ссылок . Он возвращает левый операнд , если он не равен NULL; в противном случае он возвращает правый операнд .
Ваш пример может быть переписан как:
public NameValueCollection Metadata
{
get {
if (metadata == null)
metadata = new NameValueCollection();
return metadata;
}
}
The ?? оператор называется оператором с нулевым коалесцированием и используется для определения значения по умолчанию для типов нулевых значений, а также ссылочных типов. Он возвращает левый операнд, если он не равен нулю; в противном случае он возвращает правый операнд.
Из MSDN: http://msdn.microsoft.com/en-us/library/ms173224.aspx
обнуляемого тип может содержать значение, или оно может быть определено. The ?? оператор определяет значение по умолчанию, которое должно быть возвращено, когда тип с нулевым значением присваивается типу с недействительным значением. Если вы попытаетесь присвоить тип значения с нулевым значением нестандартным типам значений без использования оператора, вы создадите ошибку времени компиляции. Если вы используете бросок, а тип значения с нулевым значением в настоящее время не определен, будет выведено исключение 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");
}
}
Если вы укажете MSDN, укажите ссылку. – strager
Это используется для подстановки значения по умолчанию в случае переменной NULL.
X = (if Y is not null return Y) ?? (else return DEFAULT)
Читать подробно обсуждение на How useful is C#'s ?? operator?
Downvote, потому что без объяснения причин. – problemofficer