寻找布尔语句的解释

Luk*_*164 2 c# boolean

我在我正在使用的库中发现了这个语句。它应该检查集群中的当前节点是否是领导者。这是声明:(!(cluster.Leader?.IsRemote ?? true))

为什么不直接使用(cluster.Leader?.IsRemote)?(忽略 ! 运算符,我知道它是如何工作的)

这种方法有什么好处吗?

Dmi*_*nko 6

让我们建立一个真值表

 (!(cluster.Leader?.IsRemote ?? true))
Run Code Online (Sandbox Code Playgroud)

构造(请注意,我们需要考虑三个值:true, false, null):

 (!(cluster.Leader?.IsRemote ?? true)) : Result 
 ----------------------------------------------
                                  true : false
                                 false :  true <- the only true we have
                                  null : false
Run Code Online (Sandbox Code Playgroud)

所以,如果你正在寻找一个简化,你可以把它作为

 (cluster.Leader?.IsRemote == false)
Run Code Online (Sandbox Code Playgroud)


Ath*_*ras 5

这意味着如果cluster.Leader?.IsRemotenull那么认为是真的?? true

有效地null ?? true等于true.

因此,如果您的leader值为 null,则整个语句将返回 false)。没有?? null你的语句甚至不会编译,因为!null意味着什么。