嘿所有人我认为这段代码在任何情况下都是有效的,因为它被铸造成bool
status_up / group_total
而是将此代码转换为parameter.Request?.InnerData?.Any() == false
可以告诉我某人为什么? (这是主要问题) 是否有更好的方法来检查这个而不是这样的东西?
bool?
答案 0 :(得分:2)
使用空条件运算符,null传播。如果使用空条件运算符,则不能以非可空类型结束 - 这与默认情况下空操作“安全”的语言中的行为相同(SQL,Objective-C,...)。因此,如果default(bool?)
为空,或parameter.Request
为空,则结果为parameter.Request.InnerData
。否则,你得到true或false,但是通过使用null-conditional运算符,你已经假设结果 can 实际上是null,所以编译器必须容纳它。由于bool
不能为null,因此会将其更改为可以为空的bool(bool?
)。
解决方案很简单 - 想一想null应该具有什么逻辑值,并使用它:
if (parameter.Request?.InnerData?.Any() ?? true)
在这种情况下,null值被解释为true,但如果需要,也可以使用false。或者,您可以使用GetValueOrDefault
代替空合并运算符,无论什么感觉更适合您。
答案 1 :(得分:1)
以下是C# reference关于?.
运算符的说法:
x?.y - null条件成员访问。 如果左手,则返回null 操作数为空。
由于在编译时编译器不知道表达式是否将计算为非空值,编译器会将类型推断为Nullable<bool>
由于您链接?.
运算符,msdn文档中的这一行也是相关的:
空条件运算符是 短路。如果一个条件成员链中的一个操作 访问和索引操作返回null,然后是链的其余部分 执行停止。其他优先级较低的操作 表达继续。例如,以下E始终执行, 和??和==操作执行。
答案 2 :(得分:0)
bool
是一种值类型,默认情况下无法与null
进行比较。 C#会将您的返回值转换为bool?
,以便为您提供支持两者的选项。