C # Types nullables et l'opérateur ternaire: Résolution des incohérences de type
En C #, l'utilisation de l'opérateur ternaire (? :
) avec des types nullables (comme int?
) peut conduire à l'erreur "Le type d'expression conditionnelle ne peut pas être déterminé ...". Cela se produit lorsque les branches vraies et fausses de l'opérateur ternaire ont des types incompatibles. Par exemple, GetBoolValue() ? 10 : null
échoue car 10
est un int
et null
représente l'absence d'une valeur. Le compilateur ne peut pas décider d'un seul type pour l'expression.
Le problème découle du besoin de l'opérateur ternaire pour un type de retour cohérent. Alors que null
peut être affecté à un entier nullable (int?
), une plaine int
ne peut pas devenir implicitement un int?
.
Voici plusieurs façons de corriger ceci:
CAST explicite en entier nullable: jetez le littéral entier à int?
:
<code class="language-csharp">x = GetBoolValue() ? (int?)10 : null;</code>
Conversion nul explicite: Cast explicitement null
à int?
:
<code class="language-csharp">x = GetBoolValue() ? 10 : (int?)null;</code>
en utilisant le mot-clé default
: le mot-clé default
fournit un moyen de type type d'obtenir la valeur par défaut pour un type, qui est null
pour les types nullables:
<code class="language-csharp">x = GetBoolValue() ? 10 : default(int?);</code>
Ces solutions garantissent la cohérence du type, permettant au compilateur de déduire correctement le type d'expression ternaire comme int?
, résolvant ainsi l'erreur de compilation. Choisissez la méthode qui convient le mieux à votre style de codage et à vos préférences de lisibilité.
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!