Type de valeur C# et comparaison nulle
En C#, les types valeur ne peuvent pas être attribués à null. En effet, les types valeur sont stockés sur la pile et celle-ci n'autorise pas les références nulles. Cependant, un type valeur peut être comparé à null à l’aide de l’opérateur d’égalité (==) ou de l’opérateur d’inégalité (!=).
Considérez le code suivant :
<code class="language-csharp">int x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
Ce code ne générera pas d'erreur de compilation, même si la valeur int ne peut pas être nulle. En effet, l'opérateur d'égalité est surchargé pour permettre de comparer les types valeur aux types valeur nullables. Un type de valeur nullable est un wrapper qui peut contenir une valeur du type sous-jacent ou null.
Dans ce cas, la valeur int x est implicitement convertie en un int nullable puis comparée au littéral nul. La comparaison est toujours fausse, donc le message « Qu'est-ce que c'est ? » n'est jamais imprimé.
Cependant, si vous essayez d'attribuer une valeur nulle à un type valeur, vous obtenez une erreur de compilation :
<code class="language-csharp">int x = null; // Error CS0037: Cannot convert null to 'int' because it is a non-nullable value type</code>
Cela est dû au fait qu'il n'y a pas de conversion implicite des types de valeur nuls vers des types de valeurs non nullables.
En résumé, les types valeur peuvent être comparés à null en utilisant les opérateurs d'égalité ou d'inégalité. Cependant, des valeurs nulles ne peuvent pas leur être attribuées. Ce comportement permet une flexibilité de codage tout en conservant l'intégrité du type valeur.
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!