public class Program { public static void Main(string[] args) { char x = 'A'; int i = 0; Console.WriteLine (true ? x : 0); Console.WriteLine(false ? i : x); } } I can't find anything on google, someone please shed some light on why the output is 65,65
3 Réponses :
Parce qu'un char
n'est rien d'autre qu'un nombre, plus précisément un int
signé, comme on le voit sur la documentation:
Le type char est implicitement convertible en l'intégrale suivante types: ushort, int, uint, long et ulong
Le caractère 'A'
a le point de code unicode 65
. Ainsi, votre ternaire renvoie simplement int
, dans votre cas 65
.
En savoir plus sur char
sur MSDN: https://docs.microsoft.com/dotnet/csharp/language-reference/builtin-types/char
A vaut 65 en encodage ASCII. L'opérateur ternaire affiche essentiellement la valeur char de A, dans ce cas 65.
L'opérateur ternaire est essentiellement une instruction if else
. Donc Console.WriteLine (true? X: 0);
affichera 65 car x est dans la partie vraie du ternaire. Console.WriteLine (false? i: x);
affichera également 65 car x est dans la partie false (else) du ternaire
Parce que vous pouvez implicitement convertir char en int mais pas l'inverse, donc le type int l'emporte et définit le type du résultat.
Si c'était l'inverse, vous obtiendrez 'A' comme résultat.
Détails https://stackoverflow.com/a/220268/11869962 ). p >
int intVar = '1'; //ok char charVar = (char)1; //ok char charVarError = 1; //error
65 est le code ASCII pour «A». Votre ternaire évalue à un entier.
Ah, ok merci beaucoup!