引入了 C# 的 Null-Conditional 运算符 后,对于以下表达式的求值:
if (instance != null && instance.Val != 0)
如果我这样重写它,
if (instance?.Val != 0)
如果实例是一个 null 引用,则它将评估为true; 它的行为类似于
if (instance == null || instance.Val != 0)
那么使用这种新语法重写评估的正确方法是什么?
编辑:
instance
是从JSON反序列化的一个大对象的字段。有许多类似这样的代码,首先检查字段是否在JSON中,如果是,则检查Val属性是否不等于常量,只有两个条件都为真时,才执行某些操作。
代码本身可以重构以使逻辑流更加“合理”,正如Peter在他的评论中所示,但在这个问题中,我想知道如何使用null-conditional operators
与!=
。
if ((instance?.Val ?? 0) != 0)
。 - ProgrammingLlamainstance?.Val != 0
,由于短路的null
不可能等于0
,整个表达式是true
。坦白地说,没有足够的上下文来知道如何正确处理表达式。对我来说,一个null
值和一个零值都导致相同的代码执行块似乎很奇怪。考虑到你处于这种情况,可能有更好的方法来处理这种情况。或者,也许不要试图在这里强行使用 null-conditional,因为它只会使代码变得更加难以阅读。 - Peter Duniho