一尘不染

在C#中,两个问号一起意味着什么?

c#

遍历以下代码行:

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

这两个问号是什么意思,是某种三元运算符吗?在Google中很难查找。


阅读 478

收藏
2020-05-19

共1个答案

一尘不染

它是空值合并运算符,与三元运算符(即时if)非常相似。另请参阅?? 运营商-MSDN

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

扩展为:

FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();

进一步扩展为:

if(formsAuth != null)
    FormsAuth = formsAuth;
else
    FormsAuth = new FormsAuthenticationWrapper();

在英语中,这意味着“如果左侧的内容不为null,请使用该名称,否则请使用右侧的内容。”

请注意,您可以依次使用任何数量的这些。以下语句将第一个非null分配Answer#Answer(如果所有Answers为null,则the
Answer为null):

string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;

同样值得一提的是,以上扩展在概念上是等效的,每个表达式的结果仅计算一次。例如,如果表达式是具有副作用的方法调用,则这一点很重要。(请指出@Joey,以指出这一点。)

2020-05-19