2010-09-28 5 views
13

Можно создать дубликат:
What do two question marks together mean in C#?Что делает ??? оператор означает в C#?

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

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

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

+7

Повторяющийся вопрос http://stackoverflow.com/questions/446835/what-do-two-question-marks-together-mean-in-c? – Crag

+1

Извините, я искал его, и я не смог его найти, поэтому я разместил его. Большое спасибо всем вам, ребята! Мне нравится эта страница, есть ответ на все: D – pjnovas

ответ

22

Это null-coalescing operator.

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

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

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

Или же:

(x == null) ? y : x 

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

Color color = user.FavouriteColor ?? defaultColor; 

COALESCE

При использовании в LINQ для 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] 
+0

Как-то странно, 'object x = null ?? null; '- действительный оператор. Думаю, вы не можете ожидать, что компилятор тоже сделает няню! – RedFilter

+0

ReSharper предупредит вас о возможном исключении NullReferenceException, если вы ссылаетесь на член x после этого утверждения, но да, он будет компилироваться. – KeithS

+0

ничего себе! это хорошая точка хехе – pjnovas

5

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

3

Если что-то пустое, оно возвращает true, иначе оно что-то возвращает. См. this link для получения дополнительной информации.

Смежные вопросы