我正在查看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();
}
答案 0 :(得分:32)
这是null-coalescing operator。如果该值不为null,它将返回其左侧的值,否则返回右侧的值(即使它为null)。它们通常以一个默认值链接在一起。
答案 1 :(得分:10)
与
相同If (formsAuth != null)
FormsAuth = formsAuth;
else
FormsAuth = FormsAuthenticationService();
答案 2 :(得分:2)
来自MSDN
??运营商被称为 使用null-coalescing运算符 为a定义默认值 可空值的类型以及 参考类型。它返回 左手操作数,如果它不为空; 否则它返回权利 操作数。
可空类型可以包含值, 或者它可以是未定义的。 ?? ?? 运算符将默认值定义为 当可以为空的类型时返回 分配给非可空类型。如果 您尝试分配可以为空的值 键入不可为空的值类型 不使用??接线员,你 将生成编译时错误。如果 你使用强制转换和可以为空的值 类型目前尚未定义,a InvalidOperationException异常 将被抛出。
有关详细信息,请参阅Nullable Types(C#编程指南)。
结果?运营商不是 被认为是一个常数,即使 它的两个参数都是常量。
答案 3 :(得分:2)
它是空的合并运算符。如果左边的值为null,那么它将返回右边的值。
答案 4 :(得分:1)
如果formsAuth为null,则返回右侧的值(new FormsAuthenticationService())。
答案 5 :(得分:0)
这意味着:如果它是非NULL,则返回第一个值(例如“formsAuth”),否则返回第二个值(new FormsAuthenticationService()):
马克