【发布时间】:2018-01-17 17:06:47
【问题描述】:
为什么这段代码有效:
if (list?.Any() == true)
但这段代码没有:
if (list?.Any())
说 错误 CS0266 无法隐式转换类型“bool?”到“布尔”
那么为什么在 if 语句中进行这种隐式转换不是语言特性呢?
【问题讨论】:
-
您的意思是为什么
if语句不接受bool?条件?如果结果为空,我觉得你想走哪条路是很模糊的。您默认为 false(有效),但在其他情况下您希望默认为 true。 -
list?.Any()有可能是null如果 list 为空。并且鉴于 Any 返回布尔值,它有可能返回布尔值。因此在编译时可以为空的布尔值 -
但除此之外,除非 Mads 或 C# 设计团队的其他人回答,否则您基本上会得到猜测。
-
if (null == true)是合法的,但if (null)不是。 -
请注意,如果
list为空,您的最终选项将引发异常。这不好。
标签: c# c#-6.0 null-conditional-operator