Maison >développement back-end >C++ >Pourquoi est `? 10: NULL` interdit dans les opérateurs ternaires C # avec des types nullables?
C # Computing ternaire et type vide: pourquoi
signaler une erreur?
? 10 : null
Lorsque vous utilisez le type disponible en C #, la cohérence du type dans l'expression est très importante. Le caractère informatique ternaire (? :) Évaluer les deux expressions en fonction de la condition.
Ici, nous essayons d'attribuer INT et NULL à la variable INT du câble X. Cela peut entraîner des erreurs de compilateurs, car il n'y a pas de conversion cachée entre ces deux types.
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; // 错误</code>Le compilateur essaie d'abord d'évaluer la bonne expression:
Le littéral 10 est un type int, et Null est un type vide. Il n'y a pas de conversion cachée entre les deux, donc des erreurs se produisent.
<code class="language-csharp">GetBoolValue() ? 10 : null</code>Afin de résoudre ce problème, nous pouvons effectuer une conversion explicite pour assurer la cohérence du type:
ou, nous pouvons convertir la surface du mot vide en int ?:
<code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null; // 将10转换为int?</code>
ou, nous pouvons utiliser le mot-clé par défaut:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null; // 将null转换为int?</code>
En assurant la cohérence du type, nous pouvons éviter l'erreur du compilateur et maintenir l'exhaustivité du type.
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!