问题描述
我经常发现自己写的代码在检查属性的值之前先检查null
。最简单的形式是:
if (someInstance != null && someInstance.someBooleanProperty)
我们是否有理由不能使用空条件运算符(?.
)来简化检查,因为它后面的属性是否像这样的布尔值?
if (someInstance?.someBooleanProperty)
上面的示例无法编译,因为它的评估结果为null
,而不是true
或false
,因此您会收到一条错误消息,指出{{1}没有隐式强制转换}到bool?
。
我们总是可以强制转换或直接检查一个值,例如:
bool
这很好用,老实说,这不是那么多额外的代码。只是,在我的观点中,C#多年来引入了所有简化功能,我不禁想知道是否有原因我们仍然不能使用这样的速记空条件?
解决方法
我认为仅使用?.
的固有问题是当someInstance
为null时条件对结果的评估。这就是编译器抱怨的原因,也是为什么您需要空检查条件和非空布尔值评估的原因。 someInstance?.SomeBooleanProperty ?? false
将同时满足这两个条件。仅?.
不能/应该推断这种逻辑。