??操作符在C#中的意思是?

What does ?? operator means in C#?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What do two question marks together mean in C#?

嗨,我在找MVC 2在C的培训,我发现了这个Sintax:

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

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


它是空合并运算符。

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

x ?? y大致等同于此(除了第一个参数只计算一次):

1
2
3
4
5
6
7
8
if (x == null)
{
     result = y;
}
else
{
     result = x;
}

或者:

1
(x == null) ? y : x

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

1
Color color = user.FavouriteColor ?? defaultColor;

聚结

在LINQ to SQL查询中使用时,可以将??运算符转换为一个合并调用。例如,此Linq查询:

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

可能导致此SQL查询:

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


它是空合并运算符。如果返回值不为空,则返回值为左侧,否则返回值为右侧。它既适用于引用类型,也适用于空值。

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


如果某个值为空,则返回true,否则返回某个值。有关更多信息,请参阅此链接。