C#不存在在逻辑评估中不支持简短的空条件检查的原因吗?

问题描述

我经常发现自己写的代码在检查属性的值之前先检查null。最简单的形式是:

if (someInstance != null && someInstance.someBooleanProperty)

我们是否有理由不能使用空条件运算符(?.)来简化检查,因为它后面的属性是否像这样的布尔值?

if (someInstance?.someBooleanProperty)

上面的示例无法编译,因为它的评估结果为null,而不是truefalse,因此您会收到一条错误消息,指出{{1}没有隐式强制转换}到bool?

我们总是可以强制转换或直接检查一个值,例如:

bool

这很好用,老实说,这不是那么多额外的代码。只是,在我的观点中,C#多年来引入了所有简化功能,我不禁想知道是否有原因我们仍然不能使用这样的速记空条件?

解决方法

我认为仅使用?.的固有问题是当someInstance为null时条件对结果的评估。这就是编译器抱怨的原因,也是为什么您需要空检查条件和非空布尔值评估的原因。 someInstance?.SomeBooleanProperty ?? false将同时满足这两个条件。仅?.不能/应该推断这种逻辑。