什么?? 运算符意味着在C#中?

pjn*_*vas 21 c# operators

可能重复:
C#中两个问号共同意味着什么?

嗨,我在C#中寻找MVC 2的一些培训,我找到了这个sintax:

ViewData["something"] = something ?? true;
Run Code Online (Sandbox Code Playgroud)

那么,那是什么'??' 是什么意思?

Mar*_*ers 34

它是零合并运算符.

它返回第一个参数,除非它为null,在这种情况下它返回第二个参数.

x ?? y 大致相当于此(除了第一个参数只评估一次):

if (x == null)
{
     result = y;
}
else
{
     result = x;
}
Run Code Online (Sandbox Code Playgroud)

或者:

(x == null) ? y : x
Run Code Online (Sandbox Code Playgroud)

当值可以为null时,为提供默认值很有用:

Color color = user.FavouriteColor ?? defaultColor;
Run Code Online (Sandbox Code Playgroud)

合并

在LINQ to SQL查询中使用时,??运算符可以转换为对COALESCE的调用.例如这个LINQ查询:

var query = dataContext.Table1.Select(x => x.Col1 ?? "default");
Run Code Online (Sandbox Code Playgroud)

可以导致此SQL查询:

SELECT COALESCE([t0].[col1],@p0) AS [value]
FROM [dbo].[table1] AS [t0]
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 8

它是空合并运算符.如果返回值为非空,则返回值为左侧,否则为右侧.它适用于引用类型和nullables

var x = "foo" ?? "bar";  // "foo" wins
string y = null;
var z = y ?? "bar"; // "bar" wins
int? n = null;
var t = n ?? 5;  // 5 wins
Run Code Online (Sandbox Code Playgroud)