Les symboles informatiques ternaires et les types vides dans le C #: limiter les détails
Lors du traitement du type de valeur vide, le symbole informatique ternaire (? :) peut avoir des comportements inattendus. Un problème commun est d'essayer d'utiliser le symbole informatique ternaire pour attribuer un caractère entier ou null à la variable entière du canal.
Par exemple, considérez le code suivant:
Dans ce code, le symbole informatique ternaire tente de calculer la bonne expression:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null;</code>
Parmi eux, Retour à une valeur booléenne, 10 est un littéral entier, Null est une référence vacante. Le compilateur tente de convertir ces valeurs pour correspondre au type de l'expression de gauche, c'est-à-dire
<code class="language-csharp">GetBoolValue() ? 10 : null</code>
GetBoolValue()
Cependant, il n'y a pas de conversion cachée entre le volume littéral (ne peut pas être vide) et l'entier vide (int?
). De même, il n'y a pas de conversion cachée entre null et entier. Cela provoque l'erreur du compilateur:
int?
Afin de résoudre ce problème, l'expression droite doit être modifiée pour garantir que les deux branches de l'opérateur à trois-yuan renvoient les valeurs compatibles avec l'expression gauche. Cela peut être réalisé grâce à une conversion implicite ou à une conversion explicite:
<code>无法确定条件表达式的类型,因为整型和<null>之间没有隐式转换。</code>
Grâce à ces modifications, le compilateur peut calculer avec succès la bonne expression et déterminer le type d'expression conditionnelle pour éliminer les erreurs.
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!