什么“??”意思?

时间:2009-04-20 21:10:17

标签: c#

我正在查看ASP.NET MVC 1.0生成的代码,并且想知道;双重问号意味着什么?

// This constructor is not used by the MVC framework but is instead provided for ease
// of unit testing this type. See the comments at the end of this file for more
// information.
public AccountController(IFormsAuthentication formsAuth, IMembershipService service)
{
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    MembershipService = service ?? new AccountMembershipService();
}

相关:

  

?? Null Coalescing Operator —> What does coalescing mean?

6 个答案:

答案 0 :(得分:32)

这是null-coalescing operator。如果该值不为null,它将返回其左侧的值,否则返回右侧的值(即使它为null)。它们通常以一个默认值链接在一起。

Check out this article for more

答案 1 :(得分:10)

相同
If (formsAuth != null)
  FormsAuth = formsAuth;
else
  FormsAuth = FormsAuthenticationService();

答案 2 :(得分:2)

这是null-coalescing operator

来自MSDN

  

??运营商被称为   使用null-coalescing运算符   为a定义默认值   可空值的类型以及   参考类型。它返回   左手操作数,如果它不为空;   否则它返回权利   操作数。

     

可空类型可以包含值,   或者它可以是未定义的。 ?? ??   运算符将默认值定义为   当可以为空的类型时返回   分配给非可空类型。如果   您尝试分配可以为空的值   键入不可为空的值类型   不使用??接线员,你   将生成编译时错误。如果   你使用强制转换和可以为空的值   类型目前尚未定义,a   InvalidOperationException异常   将被抛出。

     

有关详细信息,请参阅Nullable Types(C#编程指南)。

     

结果?运营商不是   被认为是一个常数,即使   它的两个参数都是常量。

答案 3 :(得分:2)

它是空的合并运算符。如果左边的值为null,那么它将返回右边的值。

答案 4 :(得分:1)

如果formsAuth为null,则返回右侧的值(new FormsAuthenticationService())。

答案 5 :(得分:0)

这意味着:如果它是非NULL,则返回第一个值(例如“formsAuth”),否则返回第二个值(new FormsAuthenticationService()):

马克