遍历以下代码行:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
这两个问号是什么意思,是某种三元运算符吗?在Google中很难查找。
它是空值合并运算符,与三元运算符(即时if)非常相似。另请参阅?? 运营商-MSDN。
扩展为:
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
进一步扩展为:
if(formsAuth != null) FormsAuth = formsAuth; else FormsAuth = new FormsAuthenticationWrapper();
在英语中,这意味着“如果左侧的内容不为null,请使用该名称,否则请使用右侧的内容。”
请注意,您可以依次使用任何数量的这些。以下语句将第一个非null分配Answer#给Answer(如果所有Answers为null,则the Answer为null):
Answer#
Answer
string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;
同样值得一提的是,以上扩展在概念上是等效的,每个表达式的结果仅计算一次。例如,如果表达式是具有副作用的方法调用,则这一点很重要。(请指出@Joey,以指出这一点。)