【发布时间】:2021-01-30 07:30:00
【问题描述】:
我经常发现自己编写的代码会在检查属性的值之前检查null。最简单的形式是:
if (someInstance != null && someInstance.SomeBooleanProperty)
我们是否有理由不能使用空条件运算符 (?.) 来简化检查它后面的属性是否是这样的布尔值?
if (someInstance?.SomeBooleanProperty)
上面的示例无法编译,因为它的计算结果为null,而不是true 或false,因此您会收到一条错误消息,指出没有可用于bool? 到bool 的隐式转换。
我们总是可以强制转换,或者直接检查一个值,例如:
if (someInstance?.SomeBooleanProperty == false)
这很好用,老实说,它并没有那么多额外的代码。只是,在我看来,随着 C# 多年来引入的所有简化,我不禁想知道是否有原因我们仍然不能使用这样的速记 null 条件?
【问题讨论】:
-
您可以在C# language repository提出建议
-
null-coalescing operator 允许你想要的吗?
-
你可以随时使用
someInstance?.SomeBooleanProperty ?? false -
你自己回答了。
?.的计算结果为bool?,但在 C# 中,if语句需要bool。 -
@Magnetron 我不相信这是我问题的答案。微软可以编写语言来提供一个在条件评估中使用时返回
bool的运算符,我敢肯定。
标签: c# null boolean logical-operators