Он возвращает первый аргумент, если он не равен нулю, и в этом случае он возвращает второй.
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, иначе оно что-то возвращает.
Подробнее см. эту ссылку.