Avec l'introduction de Null-Conditional Operators en C#, pour l'évaluation suivante,opérateur Null-conditionnel et! =
if (instance != null && instance.Val != 0)
Si je réécris cette façon,
if (instance?.Val != 0)
il sera évalué à true si instance est une référence null; Il se comporte comme
if (instance == null || instance.Val != 0)
Alors, quelle est la bonne façon de réécrire l'évaluation en utilisant cette nouvelle syntaxe?
Edit:
instance
est un champ d'un grand objet qui est désérialisé de JSON. Il y a quelques morceaux de code comme celui-ci, vérifiez d'abord si le champ est dans le JSON, si c'est le cas, vérifiez si la propriété Val n'est pas égale à une constante, seules les deux conditions sont vraies, faites une opération.
Le code lui-même peut être refactorisé pour rendre le flux logique plus "logique" comme indiqué par Peter dans son commentaire, bien que dans cette question je suis intéressé par comment utiliser null-conditional operators
avec !=
.
Je serais tenté de faire quelque chose comme 'if ((instance? .Val ?? 0)! = 0)' – john
En fait, il se comporte comme 'instance? .Val! = 0', où depuis le court circuited 'null' ne peut pas égaler' 0', l'expression entière est 'true'. Franchement, il n'y a pas assez de contexte pour savoir ce que «la bonne façon» d'aborder est l'expression. Il me semble étrange que les deux une valeur «nulle» et une valeur nulle à la fois conduire au même bloc d'exécution de code. Étant donné que vous êtes dans cette situation, il peut y avoir une meilleure façon d'aborder le scénario. Ou peut-être, n'essayez simplement pas de chausse-pied null-conditionnel ici, puisque tout ce qu'il va faire est de rendre le code _less_ lisible. –
J'ai créé un [violon] (https://dotnetfiddle.net/kf96px) du problème. Peter, il semble être un garde contre l'exécution d'une action, sauf si Val a une valeur non nulle/non nulle, ce qui ne me semble pas faux si vous créiez quelque chose comme une méthode API PATCH. – john