Avec l'introduction de Null-Conditional Operators en C #, pour l'évaluation suivante,
if (instance != null && instance.Val != 0)
Si je le réécris de cette façon,
if (instance?.Val != 0)
elle sera évaluée à true si l'instance est une référence nulle; 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?
Modifier:
instance
est un champ d'un gros 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, effectuez une opération.
Le code lui-même peut être refactorisé pour rendre le flux logique plus "sens" comme indiqué par Peter dans son commentaire, bien que dans cette question je m'intéresse à la façon d'utiliser null-conditional operators
avec !=
.
Avec l'opérateur Null-Conditional, la valeur renvoyée peut toujours être nulle
if ((instance?.Val ?? 0) != 0)
Si l'instance était nulle, l'instance? .Val sera également nulle (probablement int? Dans votre cas). Vous devez donc toujours vérifier les valeurs nulles avant de comparer avec quoi que ce soit:
if ((instance?.Val ?? 0) != 0)
Cela signifie: si l'instance? .Val est nulle (parce que l'instance est nulle) alors retourne 0. Sinon retourne instance.Val. Comparez ensuite cette valeur avec 0 (n'est pas égal à).
Vous pouvez utiliser l’opérateur null coallescing:
instance?.Val ?? 0
Lorsque instance
est null ou instance
n'est pas null mais Val
l'est, l'expression ci-dessus est évaluée à 0. Sinon, la valeur de Val
est renvoyée.
if ((instance?.Val).GetValueOrDefault() != 0)
les ? L'opérateur conditionnel traitera automatiquement la propriété .Val comme une valeur Nullable.