运行这行代码:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
两个问号是什么意思,是不是某种三元运算符?在 Google 中很难查找。
它是空合并运算符,非常类似于三元(立即如果)运算符。又见?? 运营商 - MSDN。
扩展为:
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
进一步扩展为:
if(formsAuth != null) FormsAuth = formsAuth; else FormsAuth = new FormsAuthenticationWrapper();
在英语中,它的意思是“如果左边的不是空的,就用那个,否则就用右边的。”
请注意,您可以按顺序使用任意数量的这些。以下语句将分配第一个非空值Answer#(Answer如果所有答案都为空,Answer则为空):
Answer#
Answer
string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;
另外值得一提的是,虽然上面的扩展在概念上是等价的,但每个表达式的结果只计算一次。例如,如果表达式是具有副作用的方法调用,这一点很重要。