C # Opérateur ternaire et entiers nullables: pourquoi ? 10 : null
échoue
L'opérateur Ternaire C # (condition ? value1 : value2
) exige que les deux value1
et value2
aient des types compatibles. Examinons pourquoi le code suivant produit une erreur de compilateur:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
Le message d'erreur, "Le type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre 'int' et '10
comme un int
et null
comme, bien, null
(qui dans ce contexte représente l'absence d'une valeur). Puisqu'il n'y a pas de conversion automatique entre un int
et une valeur nulle, le compilateur ne peut pas déduire le type résultant de l'expression ternaire.
Solutions:
Pour résoudre ce problème, nous devons assurer la cohérence des types. Voici plusieurs approches:
Casser explicitement 10 à un entier nullable (int?
):
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
Cela indique explicitement au compilateur que 10
doit être traité comme un entier nullable, permettant à la null
d'être une deuxième branche valide.
CASSAGE explicitement null
à un entier nullable:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
Cela jette explicitement null
à int?
, ce qui rend les deux côtés de l'opérateur ternaire compatible.
Utilisez la valeur par défaut pour int?
:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
default(int?)
évalue à null
, fournissant un moyen de type de type de représenter le cas nul. Ceci est souvent préféré pour plus de clarté.
Les trois solutions obtiennent le même résultat: x
sera attribuée soit 10
(en tant que int?
) ou null
sur la base du résultat de GetBoolValue()
. La clé est de s'assurer que les deux branches de l'opérateur ternaire ont le même type compatible. L'utilisation du mot-clé default
est généralement considérée comme la solution la plus lisible et maintenable.
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!