Mit der Einführung von Null-Conditional Operators in C#, für die folgende Auswertung,Null-bedingter Operator und! =
if (instance != null && instance.Val != 0)
Wenn ich es auf diese Weise neu zu schreiben,
if (instance?.Val != 0)
es bewertet werden true wenn die Instanz eine Nullreferenz ist; Es verhält sich wie
if (instance == null || instance.Val != 0)
Also, was ist der richtige Weg, um die Bewertung mit dieser neuen Syntax neu schreiben?
Edit:
instance
ist ein Feld eines großen Objekts, das von JSON deserialisiert wird. Es gibt einige Codeteile wie diese, überprüfen Sie zuerst, ob das Feld in der JSON ist, wenn es ist, überprüfen Sie, ob die Val-Eigenschaft NICHT gleich einer Konstanten ist, nur beide Bedingungen sind wahr, machen Sie eine Operation.
Der Code selbst Refactoring kann der logische Fluss mehr „macht Sinn“ zu machen, wie von Peter in seinem Kommentar angezeigt, obwohl in dieser Frage, die ich bin interessiert an, wie null-conditional operators
mit !=
zu verwenden.
Ich wäre versucht etwas zu tun, wie 'if ((Beispiel? .Val ?? 0)! = 0)' – john
Eigentlich verhält es sich wie 'Instanz? .Val! = 0', wo seit der Kurzform circuited 'null' kann unmöglich gleich '0' sein, der ganze Ausdruck ist 'wahr'. Ehrlich gesagt gibt es nicht genug Kontext, um zu wissen, was _ "der richtige Weg" _ ist, um den Ausdruck anzusprechen. Es erscheint mir komisch, dass sowohl ein 'Null'-Wert als auch ein Null-Wert beide zum selben Code-Ausführungsblock führen. Angesichts der Tatsache, dass Sie sich in dieser Situation befinden, gibt es vielleicht sogar noch eine bessere Möglichkeit, sich dem Szenario zu nähern. Oder vielleicht, versuche einfach nicht, hier null-bedingungslos zu schuhen, denn alles, was es tun wird, ist, den Code _less_ lesbar zu machen. –
Ich habe eine [Geige] (https://dotnetfiddle.net/kf96px) des Problems erstellt. Peter, es scheint ein Wächter gegen die Ausführung einer Aktion zu sein, es sei denn, Val hat einen Wert ungleich null/ungleich null, was mir nicht falsch erscheint, wenn Sie etwas wie eine PATCH-API-Methode erstellen. – john