在C#中引入Null-Conditional Operators,为下面的评测,空,条件运算符和!=
if (instance != null && instance.Val != 0)
如果我把它改写这种方式,
if (instance?.Val != 0)
将进行评估,以如果实例是空引用,则返回true;它的行为如同
if (instance == null || instance.Val != 0)
那么,使用这种新语法重写评估的正确方法是什么?
编辑:
instance
是从JSON反序列化大对象的字段。这样的代码有很多,首先检查字段是否在JSON中,如果是,检查Val属性是否不等于常量,只有两个条件都是真的,执行一些操作。
代码本身可以被重构,以使得逻辑流程更加“有意义”,如Peter在他的评论中所表明的,尽管在这个问题中我对如何使用null-conditional operators
和!=
感兴趣。
我会试试像'if((instance?.Val ?? 0)!= 0)' – john
其实,它的行为就像'instance?.Val!= 0',短路的'null'不可能等于'0',整个表达式为'true'。坦率地说,没有足够的背景知道什么 - “正确的方式”来解决这个问题。对我来说,“null”值和零值都导致相同的代码执行块似乎很奇怪。鉴于你处于这种情况,可能有更好的方法来处理这种情况。或者,也许,只是不要试图在这里使用空值条件,因为它所要做的就是使代码无法读取。 –
我创建了一个问题的[fiddle](https://dotnetfiddle.net/kf96px)。彼得,它似乎是一种防范措施,除非Val具有非零/非空值,如果您创建类似于PATCH API方法的东西,对我来说这似乎不对。 – john