在这行代码中运行:

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

这两个问号是什么意思,是某种三元运算符吗?在谷歌里很难查到。


当前回答

?? 当值为null时,为可为null的类型提供值。因此,如果formsAuth为空,它将返回新的FormsAuthenticationWrapper()。

其他回答

接合运算符

相当于

FormsAuth = formsAUth == null ? new FormsAuthenticationWrapper() : formsAuth

这个运算符称为空合并运算符。如果操作数不为空,则返回左侧操作数;否则返回右手操作数。

int? variable1 = null;
int variable2  = variable1 ?? 100;

如果variable1不为空,则将variable2设置为variable1的值;否则,如果variable1==null,则将variable2设置为100。

这是三元运算符的短手。

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#的隐藏功能?

这没什么危险。事实上,它很美。如果需要,可以添加默认值,例如:

CODE

int x = x1 ?? x2 ?? x3 ?? x4 ?? 0;