En C#, bien qu'il soit généralement admis que les types de valeur (tels que les entiers) ne peuvent pas être nuls, ils peuvent en fait être comparés à des valeurs nulles. Ce comportement peut prêter à confusion pour les développeurs, comme le montre l'extrait de code suivant :
<code class="language-csharp">Int32 x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
Ce code contredit notre attente selon laquelle x ne peut pas être nul, puisque null représente un objet à valeur non définie. Cependant, le compilateur ne renvoie pas d’erreur, ce qui nous fait remettre en question la validité de cette comparaison.
L'explication réside dans la manière unique dont les opérateurs sont résolus en C#. Dans ce cas, le compilateur identifie deux surcharges de l'opérateur == qui peuvent s'appliquer :
x et null sont tous deux implicitement convertibles en entiers nullables (Nullable
Ce comportement est cohérent avec les modèles qui permettent de comparer les types valeur avec d'autres types primitifs. Par exemple, la comparaison x == 12,6 (où x est un entier) donne également toujours faux car l'entier x est implicitement convertible en un nombre à virgule flottante double précision et la comparaison s'effectue entre deux nombres à virgule flottante double précision. .
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!