随着C#中的null条件运算符的引入,用于以下评估,
if (instance != null && instance.Val != 0)
如果我以这种方式重写,
if (instance?.Val != 0)
如果实例为null引用;它的行为像
if (instance == null || instance.Val != 0)
那么,使用此新语法重写评估的正确方法是什么?
编辑:
instance
是一个大对象的字段,它可以从JSON中进行。有很多这样的代码,首先检查字段是否在JSON中,如果是的,请检查Val属性是否不等于常数,仅两个条件是正确的,都可以进行一些操作。
可以重构代码本身,以使逻辑流更加"有意义",如彼得在他的评论中所指示的那样,尽管在这个问题中,我对如何将null-conditional operators
与!=
一起使用感兴趣。
带有null条件运算符返回的值始终为null
if ((instance?.Val ?? 0) != 0)
如果实例为null,则实例?。因此,您应该始终在与任何内容进行比较之前始终检查nulls:
if ((instance?.Val ?? 0) != 0)
这意味着:如果是实例?。接下来将此值与0比较(不等于(。
您可以使用null coallescing操作员:
instance?.Val ?? 0
当instance
为null或instance
不是null而不是null,而是Val
,上述表达式将评估为0。否则,Val
的值将返回。
if ((instance?.Val).GetValueOrDefault() != 0)
?有条件的操作员将自动将.VAL属性视为无效的。