C#6.0引入了新的酷Null条件运算符
obj?.method();
检查obj是否为null,如果为null,则停止进一步执行语句。因此,代码与手动执行的代码相同
if (!Object.ReferenceEquals(obj, null))
obj.method();
但是(至少对我来说)更直观
if (obj != null)
obj.method();
区别在于,运算符==可以重载,在第二种情况下使用它,在不使用空条件运算符重载的运算符的情况下,它始终是空引用相等。
他们采用这种方式设计它是否有特定原因?对我来说,这似乎违反直觉,而且不一致。如果更自然地使用==运算符,我不会得到by design
的解释。甚至official docs似乎也没有说它是引用相等。
operation to its operand only if that operand evaluates to non-null.