C#中两个问号在一起意味着什么?
穿过这行代码:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
这两个问号是什么意思,它是一种三元运算符? 很难在Google中查找。
它是空合并运算符,与三元运算符(immediate-if)非常相似。 也可以看看 ?? 运营商 - 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;
另外值得一提的是,上面的扩展在概念上是等价的,每个表达式的结果只被评估一次。 例如,如果表达式是带副作用的方法调用,这非常重要。 (感谢@Joey指出这一点。)
就因为没有其他人说过这些神奇的话:它是无效的合并算子 。 它在C#3.0语言规范的7.12节中定义。
这非常方便,特别是因为它在表达式中多次使用时的工作方式。 表单的形式:
a ?? b ?? c ?? d
会给表达式的结果a
,如果它是不为空,否则尽量b
,否则尽量c
,否则试试d
。 它在每个点都会短路。
另外,如果d
的类型是不可空的,则整个表达式的类型也是不可空的。
它是空合并运算符。
http://msdn.microsoft.com/en-us/library/ms173224.aspx
是的,几乎不可能搜索,除非你知道它叫什么! :-)
编辑:这是另一个问题很酷的功能。 你可以链接它们。
C#的隐藏特性?
链接地址: http://www.djcxy.com/p/1575.html