在这行代码中运行:

FormsAuth = formsAuth ?? new FormsAuthenticationWrapper();

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


当前回答

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

CODE

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

其他回答

其他人已经很好地描述了空合并运算符。在需要对null进行一次测试的情况下,缩短的语法??=可以增加可读性。

传统空测试:

if (myvariable == null)
{
    myvariable = new MyConstructor();
}

使用空合并运算符,这可以写成:

myvariable = myvariable ?? new MyConstructor();

其也可以用缩短的语法编写:

myvariable ??= new MyConstructor();

有些人觉得它更易读、简洁。

接合运算符

相当于

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

它是空合并运算符。

http://msdn.microsoft.com/en-us/library/ms173224.aspx

是的,几乎不可能搜索,除非你知道它叫什么!:-)

编辑:这是另一个问题的一个很酷的特点。你可以把它们拴起来。

C#的隐藏功能?

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

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

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

以最简单的方式,两个问号被称为“合并运算符”,它返回链中的第一个非空值。

例如,如果您从一个不可为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)我希望这能澄清你的问题。