空条件运算符和!=

时间:2017-06-28 04:51:04

标签: c# null evaluation

在C#中引入Null-Conditional Operators,进行以下评估,

if (instance != null && instance.Val != 0)

如果我这样重写,

if (instance?.Val != 0)  

如果instance是null引用,它将被评估为 true ;它的行为类似于

if (instance == null || instance.Val != 0)

那么使用这种新语法重写评估的正确方法是什么?

修改

instance是一个大对象的字段,它是从JSON反序列化的。有很多这样的代码,首先检查字段是否在JSON中,如果是,检查Val属性是否不等于常量,只有两个条件都为真,做一些操作。

代码本身可以重构,以使逻辑流更多"有意义"正如彼得在评论中指出的那样,尽管在这个问题中,我对如何将null-conditional operators!=一起使用感兴趣。

3 个答案:

答案 0 :(得分:10)

使用Null-Conditional运算符返回值始终为null

if ((instance?.Val ?? 0) != 0)

如果instance为null,那么实例?.Val也将为null(在你的情况下可能是int?)。因此,在与任何事物进行比较之前,您应该始终检查空值:

if ((instance?.Val ?? 0) != 0)

这意味着: 如果实例?.Val为null(因为实例为null),则返回0.否则返回instance.Val。接下来将该值与0(不等于)进行比较。

答案 1 :(得分:7)

你可以使用null coallescing operator:

instance?.Val ?? 0

instance为空或instance不为空但Val为时,上述表达式将计算为0.否则将返回Val的值。< / p>

答案 2 :(得分:2)

if ((instance?.Val).GetValueOrDefault() != 0)  

?条件运算符会自动将.Val属性视为Nullable。