空条件运算符和!=

ken*_*yzx 17 c# null evaluation

通过在C#中引入Null-Conditional运算符,进行以下评估,

if (instance != null && instance.Val != 0)
Run Code Online (Sandbox Code Playgroud)

如果我这样改写,

if (instance?.Val != 0)  
Run Code Online (Sandbox Code Playgroud)

如果instance是null引用,它将被计算为true ; 它表现得像

if (instance == null || instance.Val != 0)
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

该代码本身可以被重构,使逻辑流程更加"决策意识"由彼得在他的评论中指出,虽然在这个问题上,我感兴趣的是如何使用null-conditional operators!=.

Pab*_*sso 10

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

if ((instance?.Val ?? 0) != 0)
Run Code Online (Sandbox Code Playgroud)

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

if ((instance?.Val ?? 0) != 0)
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*tos 7

你可以使用null coallescing运算符:

instance?.Val ?? 0
Run Code Online (Sandbox Code Playgroud)

如果instance为null或instance不为null但是Val,则上面的表达式将计算为0.否则Val将返回值.