Maison >développement back-end >C++ >Pourquoi '? 10: null' échoue avec des types nullables en C #?
Considérez le fragment de code suivant:
<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>Le but ici est: si
renvoie GetBoolValue()
, la valeur 10 est attribuée à l'entier vide true
; Cependant, le compilateur marquera une erreur: x
x
null
Interprétation des questions
<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>
Cette erreur met en évidence le problème des types de non-correspondance dans l'expression de trois-yuan. L'expression gauche renvoie une valeur , et l'analyse est ou
. La bonne expression tente de combiner deux expressions:
GetBoolValue()
bool
, il s'agit d'un volume littéral true
(pas false
).
10
int
Le compilateur essaie d'abord d'évaluer la bonne expression. Il rencontre littéral int?
et les caractères vides null
int
Afin de résoudre ce problème, la bonne expression doit être compatible avec le type de types vides. Il y a plusieurs façons:
10
null
int
a converti le littéralement en null
:
Utilisez le type vide ou la valeur par défaut:
int?
Conversion implicite
<code class="language-c#"> x = GetBoolValue() ? (int?)10 : null;</code>La conversion cachée mentionnée dans la réponse acceptable est:
à :
Le type vide<code class="language-c#"> x = GetBoolValue() ? 10 : (int?)null; x = GetBoolValue() ? 10 : default(int?);</code>peut être implicitement converti en
TO :
non -mptypeut être converti en vide
.int?
. null
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!