“??”运算符是做什么用的?

5

可能是重复问题:
什么是“??”运算符?

我最近在C#中遇到了??运算符。这个运算符是什么意思,什么时候会使用它呢?

示例:

string name = nameVariable ?? string.Empty;

13
人啊,要是他们发明语言时能把它们记录下来就好了。 - i_am_jorf
@jeff- 去看看C#运算符页面,然后告诉我那个怎么样。编辑:显然有多个版本的C#运算符页面。如果你导航到VS 2010上特定的页面,你就可以找到它,否则它似乎不存在。 - Mike M.
2
@Mike M:或者是VS 2005的版本。或者是VS 2008的版本。空值合并运算符作为C# 2的一部分被引入。 - Jon Skeet
@0xA3:在发布问题之前,我确实在SO上进行了搜索。当你搜索“?? operator C#”时,你引用的那个问题并没有出现。我第一次搜索时没有意识到的是,“??”被从我的搜索条件中删除了。 - brainimus
@jon - 是的,你赢了。我认输了。不过,如果你只是在谷歌上搜索C#运算符,第一个结果并没有列出它。 - Mike M.
6个回答

10

??运算符的基本含义是"或者如果它为null,blah"。它相当于:

string name = (nameVariable == null) ? string.Empty : nameVariable;

如果您对该语法不熟悉,那么基本上是这样:

string name;
if (nameVariable == null)
    name = string.Empty;
else
    name = nameVariable;

6

这是一个null-合并运算符,它会在左侧为空时返回右侧内容。

有趣的是,你甚至可以这样使用:

string temp = (first ?? second).Text

如果“first”为空,它将返回“second”变量的文本属性。

3
它有一个引人注目的标题Null Coalescing Operator。它的作用是评估一个表达式,如果表达式为空,则返回右操作数,否则返回左操作数(即原始值)。

以您的示例为基础,您将获得以下结果:

string nameVariable = "Diplodocus";
string name = nameVariable ?? string.Empty;
// assigns name the value "Diplodocus"

而且...

string nameVariable = null;
string name = nameVariable ?? string.Empty; 
// assigns name the value String.Empty;

请注意,您可以将其与任何引用类型或可空类型一起使用,而不仅仅是字符串。


1

这相当于检查 null 并在第一个值为 null 时将其设置为某个值。你上面的语句等价于:

string name = nameVariable == null ? string.Empty : nameVariable;

0

表达式

value1 ?? value2

如果value1不为null,则返回value1,否则返回value2。


0

这是一个空引用检查,如果 nameVariable 为空,则返回空字符串。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接