我一直在玩C#6的Null Conditional Operator(这里有更多信息).
我非常喜欢语法,我认为它使代码更具可读性,但我认为当你遇到一个本身可能为null的对象上的属性值时,代码究竟要做什么是值得怀疑的.
例如,如果我有一个带有十进制属性的类,并且我想要对该十进制值进行条件检查,我会写如下:
if (foo?.Bar > max)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
从表面上看,这看起来很棒......如果foo不为null,则获取Bar的值并检查它是否大于最大值,如果是,则执行某些操作.
但是,如果foo为null会怎么样?!
如果实际上对象的值为null,则null条件运算符将返回null.它将对Bar的调用短路,并立即返回null,避免编程错误,否则会导致NullReferenceException.
我在这里写了一个小提琴,表明它确实起作用,正在做我期待它做的事情但是我无法理解它是如何决定条件的结果.
短路如何等于假?在我的脑海中,这段代码现在要说"如果foo为null,检查null是否> max,这是不可能的,所以返回false"或"如果foo为null,那么foo!= null将返回false,所以你得到一个假"但文档说null条件检查返回null,而不是false.