Что значит?? оператор означает в С#?

Возможный дубликат:
Что означают два знака вопроса в С#?

Привет, я искал некоторые тренировки MVC 2 в С#, и я нашел этот sintax:

ViewData["something"] = something ?? true;

Итак, что это такое? означает?.

Ответы

Ответ 1

Это оператор null-coalescing.

Он возвращает первый аргумент, если он не равен нулю, и в этом случае он возвращает второй.

x ?? y примерно эквивалентен этому (за исключением того, что первый аргумент оценивается только один раз):

if (x == null)
{
     result = y;
}
else
{
     result = x;
}

Или, альтернативно:

(x == null) ? y : x

Это полезно для предоставления значения по умолчанию, когда значение может быть нулевым:

Color color = user.FavouriteColor ?? defaultColor;

COALESCE

При использовании в запросе LINQ to SQL оператор ?? может быть переведен на вызов COALESCE. Например, этот запрос LINQ:

var query = dataContext.Table1.Select(x => x.Col1 ?? "default");

может привести к этому SQL-запросу:

SELECT COALESCE([t0].[col1],@p0) AS [value]
FROM [dbo].[table1] AS [t0]

Ответ 2

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

var x = "foo" ?? "bar";  // "foo" wins
string y = null;
var z = y ?? "bar"; // "bar" wins
int? n = null;
var t = n ?? 5;  // 5 wins

Ответ 3

Если что-то пустое, оно возвращает true, иначе оно что-то возвращает. Подробнее см. эту ссылку.