Maison > développement back-end > C++ > Vérifications nulles C# : quand utiliser « x is null » ou « x == null » ?

Vérifications nulles C# : quand utiliser « x is null » ou « x == null » ?

Barbara Streisand
Libérer: 2024-12-30 12:55:09
original
839 Les gens l'ont consulté

C# Null Checks: When to Use `x is null` vs. `x == null`?

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
Copier après la connexion

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)
Copier après la connexion

Quand utiliser l'un sur l'autre

En général :

  • Utilisez x == null si vous êtes préoccupé par les performances ou si l'opérateur d'égalité est surchargé.
  • Utilisez x is null si vous devez vérifier l'égalité des types (par exemple, dans une expression de correspondance de modèle).

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal