在这行代码中运行:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
这两个问号是什么意思,是某种三元运算符吗?在谷歌里很难查到。
在这行代码中运行:
FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();
这两个问号是什么意思,是某种三元运算符吗?在谷歌里很难查到。
当前回答
这是三元运算符的短手。
FormsAuth = (formsAuth != null) ? formsAuth : new FormsAuthenticationWrapper();
或者对于那些不做三元的人:
if (formsAuth != null)
{
FormsAuth = formsAuth;
}
else
{
FormsAuth = new FormsAuthenticationWrapper();
}
其他回答
它是空合并运算符。
http://msdn.microsoft.com/en-us/library/ms173224.aspx
是的,几乎不可能搜索,除非你知道它叫什么!:-)
编辑:这是另一个问题的一个很酷的特点。你可以把它们拴起来。
C#的隐藏功能?
以最简单的方式,两个问号被称为“合并运算符”,它返回链中的第一个非空值。
例如,如果您从一个不可为null的变量中的可为null对象获取值,则可以使用此运算符。即
int a=1;整数?b=空;a=b??0;
上述方程的结果将为零,因为b为空,我们使用了??运算符,这意味着当且仅当b为空时,它将返回0。
int a=1;整数?b=15;a=b??0;
在上式中,a将得到值“15”,因为b具有有效值且不为空。还有,你不能使用??运算符。
在以上示例中,我使用了??0,但是,在??之后也可以使用一个完整的新公式??操作人员
例如a=b??(x==1?10:15)我希望这能澄清你的问题。
谢谢大家,这里是我在MSDN网站上找到的最简洁的解释:
// y = x, unless x is null, in which case y = -1.
int y = x ?? -1;
?? 当值为null时,为可为null的类型提供值。因此,如果formsAuth为空,它将返回新的FormsAuthenticationWrapper()。
接合运算符
相当于
FormsAuth = formsAUth == null ? new FormsAuthenticationWrapper() : formsAuth