Comparaisons de références nulles en C# : "x est nul" vs "x == null"
En C# 7, l'introduction de l'opérateur de correspondance de modèles a soulevé des questions sur son utilisation par rapport à l'expression traditionnelle == null. Bien que ces expressions puissent sembler interchangeables lorsqu'il s'agit de null, il existe des différences clés à prendre en compte lors de la comparaison des types de référence.
Considération de type
Contrairement à == null, qui compare l'objet références pour l’égalité, x est nul vérifie le type de x. Si x est un type référence, x is null renvoie true uniquement si x est null. En revanche, x == null renvoie true pour les types null et référence avec des valeurs autres que null.
class Foo {} Foo foo = null; Console.WriteLine(foo is null); // True Console.WriteLine(foo == null); // True
Implications sur les performances
En interne, x correspond à des appels nuls System.Object.Equals(object, object), tandis que x == null appelle ceq (une méthode de comparaison pour les types référence). Pour les références nulles, les deux expressions ont les mêmes performances puisqu’elles renvoient toutes deux vrai. Cependant, pour les références non nulles, x est nul peut être considérablement plus lent en raison de sa vérification de type supplémentaire.
Opérateurs d'égalité surchargés
Lorsqu'un opérateur d'égalité (tel que == ou Equals) est surchargé pour un type spécifique, x is null ne vérifie plus l'égalité des types et délègue à la place à l'opérateur surchargé. D'un autre côté, x == null vérifie toujours l'égalité des références.
class Foo { public static bool operator ==(Foo left, Foo right) => ... public static bool operator !=(Foo left, Foo right) => ... } Foo foo1 = new Foo(); Foo foo2 = null; Console.WriteLine(foo1 is null); // False (checks type only) Console.WriteLine(foo1 == null); // False (delegates to overloaded operator) Console.WriteLine(foo2 is null); // True (checks type only) Console.WriteLine(foo2 == null); // True (reference comparison)
Quand utiliser l'un sur l'autre
En général :
En fin de compte, le choix entre x est nul et x == null dépend des exigences spécifiques de votre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!