在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