"?? "有什么用途?

6

3
“??”可能很难搜索到,但是搜索“C#语法”或“C#运算符”很快就能得到答案。 - Dirk Vollmar
1个回答

9

这是一个重复的问题,但是很难搜索到,所以我很高兴能够为将来的搜索提供另一个目标...

它是空合并运算符。它基本上评估第一个操作数,如果结果为null(无论是null引用还是可空值类型的null值),则评估第二个操作数。结果是最后评估的操作数。

请注意,由于其结合性,您可以编写:

int? x = E1 ?? E2 ?? E3 ?? E4;

如果E1E2E3E4都是int?类型的表达式,则它将从E1开始,并继续直到找到一个非空值。
第一个操作数必须是可空类型,但第二个操作数可以是非空类型,在这种情况下,整个表达式类型为非空类型。例如,假设E4int类型的表达式(但所有其他表达式仍然是int?),则可以使x成为非空类型。
int x = E1 ?? E2 ?? E3 ?? E4;

非常有用的信息 - 它在大多数编程语言中都有效吗? - Thomas Clayson
@Thomas:不,据我所知只有C#。VB可能有类似的东西,其他一些语言也有空安全引用。 - Jon Skeet
@Thomas Clayson:从版本5.10开始,空值合并运算符在C#和Perl中基本上都存在(Perl语法为//)。 - Dirk Vollmar
非常感谢您的回答,这对我很有帮助!不知道在VB.NET中是否存在类似的东西? - m.edmondson
@0xA3:谢谢你的纠正。我之前没有遇到过这个。 - Jon Skeet

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