Maison >développement back-end >C++ >Pourquoi la conversion de type implicite échoue-t-elle avec l'opérateur conditionnel de C # et comment peut-il être résolu?
Problèmes d'opérateur conditionnel C# et de conversion de type implicite
L'opérateur conditionnel C# (?:
) peut provoquer des erreurs de conversion de type inattendues. Un scénario courant consiste à attribuer une valeur booléenne à une variable d'octet :
<code class="language-csharp">byte aByteValue; bool aBoolValue = true; aByteValue = aBoolValue ? 1 : 0; // Error: Cannot implicitly convert type 'int' to 'byte'</code>
Ce code échoue car le type de l'opérateur conditionnel est déterminé par ses opérandes (1 et 0). C# traite ces nombres littéraux comme des types int
. L'opérateur produit donc un résultat int
, qui ne peut pas être implicitement converti en byte
.
Contrairement à l'affectation typique où le type de la variable cible dicte la conversion, l'opérateur conditionnel donne la priorité au type commun de ses branches. Dans ce cas, les deux branches sont implicitement convertibles en int
, faisant de int
le type de résultat.
Résolution : diffusion explicite
La solution consiste à convertir explicitement l'expression conditionnelle en byte
:
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0; // Correct</code>
Cette conversion explicite garantit que l'expression conditionnelle est évaluée comme un byte
, résolvant ainsi l'erreur de conversion implicite. Le compilateur comprend désormais le type souhaité et effectue la conversion nécessaire en toute sécurité.
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!