寻找布尔语句的解释
c#
我在我正在使用的库中发现了这个语句。它应该检查集群中的当前节点是否是领导者。这是声明:(!(cluster.Leader?.IsRemote ?? true))
为什么不直接使用(cluster.Leader?.IsRemote)
?(忽略 ! 运算符,我知道它是如何工作的)
这种方法有什么好处吗?
回答
让我们建立一个真值表的
(!(cluster.Leader?.IsRemote ?? true))
构造(请注意,我们需要考虑三个值:true
, false
, null
):
(!(cluster.Leader?.IsRemote ?? true)) : Result
----------------------------------------------
true : false
false : true <- the only true we have
null : false
所以,如果你正在寻找一个简化,你可以把它作为
(cluster.Leader?.IsRemote == false)
回答
这意味着如果cluster.Leader?.IsRemote
是null
那么认为是真的?? true
有效地null ?? true
等于true
.
因此,如果您的leader
值为 null,则整个语句将返回 false)。没有?? null
你的语句甚至不会编译,因为!null
意味着什么。