网友问题:
遇到以下代码行:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
这两个问号是什么意思,是某种三元运算符吗?
网友回答:
只是因为还没有其他人说出神奇的话:它是空合并运算符。它在 C# 7.12 语言规范的第 3.0 节中定义。
它非常方便,特别是因为它在表达式中多次使用时的工作方式。表单的表达式:
a ?? b ?? c ?? d
如果表达式为非 null,将给出表达式的结果,否则尝试,否则尝试,否则尝试。它在每个点都短路。a
b
c
d
此外,如果 的类型不可为空,则整个表达式的类型也不可为空。d
网友回答:
它是零合并运算符,非常类似于三元(即时 if)运算符。参见 ??操作员 – MSDN。
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
扩展到:
FormsAuth = formsAuth != null ? formsAuth : new FormsAuthenticationWrapper();
进一步扩展到:
if(formsAuth != null)
FormsAuth = formsAuth;
else
FormsAuth = new FormsAuthenticationWrapper();
在英语中,它的意思是“如果左边的任何东西不为空,那就使用它,否则使用右边的东西。
请注意,您可以按顺序使用任意数量的这些。以下语句会将第一个非 null 分配给(如果所有答案都为 null,则为 null):Answer#
Answer
Answer
string Answer = Answer1 ?? Answer2 ?? Answer3 ?? Answer4;
另外值得一提的是,虽然上面的扩展在概念上是等效的,但每个表达式的结果只计算一次。例如,如果表达式是具有副作用的方法调用,则这一点很重要。(感谢@Joey指出这一点。
网友回答:
它是空合并运算符。
http://msdn.microsoft.com/en-us/library/ms173224.aspx
是的,除非您知道它叫什么,否则几乎不可能搜索!🙂
编辑:这是另一个问题中的一个很酷的功能。您可以链接它们。
C# 的隐藏功能?
模板简介:该模板名称为【在 C# 中,两个问号在一起是什么意思?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。