一尘不染

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

javascript

运行这行代码:

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

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


阅读 247

收藏
2022-02-15

共1个答案

一尘不染

它是空合并运算符,非常类似于三元(立即如果)运算符。又见?? 运营商 - MSDN

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

扩展为:

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

进一步扩展为:

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

在英语中,它的意思是“如果左边的不是空的,就用那个,否则就用右边的。”

请注意,您可以按顺序使用任意数量的这些。以下语句将分配第一个非空值Answer#Answer如果所有答案都为空,Answer则为空):

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

另外值得一提的是,虽然上面的扩展在概念上是等价的,但每个表达式的结果只计算一次。例如,如果表达式是具有副作用的方法调用,这一点很重要。

2022-02-15