[英]Is there a reason C# doesn't support short-hand, null-conditional checking in logical evaluations?
我经常发现自己编写的代码在检查属性的值之前检查null
。 最简单的形式是:
if (someInstance != null && someInstance.SomeBooleanProperty)
我们是否有理由不能使用空条件运算符 ( ?.
) 来简化检查它后面的属性是否是这样的布尔值?
if (someInstance?.SomeBooleanProperty)
上面的示例无法编译,因为它的计算结果为null
,而不是true
或false
,因此您会收到错误消息,说没有可用于bool?
隐式bool?
bool
。
我们总是可以强制转换,或者直接检查一个值,例如:
if (someInstance?.SomeBooleanProperty == false)
这工作得很好,老实说,它并没有那么多额外的代码。 只是,在我看来,随着 C# 多年来引入的所有简化,我不禁想知道我们是否仍然不能使用像这样的简写 null 条件?
我认为仅使用?.
的固有问题?.
当someInstance
为 null 时,条件评估结果是什么。 这就是编译器抱怨的原因以及您需要空检查条件和非空布尔评估的原因。 someInstance?.SomeBooleanProperty ?? false
someInstance?.SomeBooleanProperty ?? false
将满足这两个条件。 ?.
单独不能/不应该推断出这个逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.