未来访问者请注意:这个问题是基于错误的复制代码。?.
操作员确实短路了。您现在可以关闭此浏览器选项卡。
网上有许多消息来源声称空条件运算符 ( ?.
) 短路(例如http://www.informit.com/articles/article.aspx?p=2421572,搜索“电路”)。我无法检测到任何此类事情:
static void Main()
{
var c = new C();
Console.WriteLine(c?.Inner?.Inner); //does not rely on short circuiting, works
Console.WriteLine(c?.Inner.Inner); //throws NullReferenceException
}
class C
{
public C Inner;
}
在这里,第一行因为第二?.
行而起作用。第二个?.
将 null 作为其第一个操作数,因此也返回 null。这不是短路。
显然,即使触发了 null 案例,链的其余部分也会执行。链没有中止。对我来说,短路意味着链条被中止。MSDN 声称是这种情况,但代码示例没有演示短路:
//The last example demonstrates that the null-condition operators are short-circuiting
int? count = customers?[0]?.Orders?.Count();
// null if customers, the first customer, or Orders is null
这种行为在 C# 6 开发周期中是否曾经改变过?这将解释网络上的不良来源。如果它不存在,为什么会有这么多关于短路的讨论?我可能在这里误解了一些东西。
这不是重复的,因为它是关于操作员是否短路(答案:不,尽管接受的答案没有这么说)。这个候选人是关于可空布尔值和其他无关的。