控制台在使用条件运算符(?:)时将char显示为int



我对以下代码的输出感到惊讶

public static void Main(string[] args)
{
char x = 'A';
int i = 0;
Console.WriteLine (true  ? x : 0);
Console.WriteLine(false ? i : x); 
}

当我读C#面试问题时,我看到了这个代码,上面代码的输出是

输出

65
65

我想知道这是怎么发生的。

有人能解释一下吗?谢谢

'A'char,具有65

然而,有一个技术解释为什么这会导致一个整数(而不是字符的字符串表示(,你可以在ECMA C#规范中找到它

12.15条件运算符

?的第二个和第三个操作数x和y:操作员控制条件表达式的类型

  • 如果x具有类型x并且y具有类型y,那么,
    • 如果X和Y是同一类型,那么这就是条件表达式的类型
    • 否则,如果从X到Y存在隐式转换(§11.2(,但从Y到X不存在,则Y是条件表达式的类型
    • 否则,如果存在从X到Y的隐式枚举转换(§11.2.4(,则Y是条件表达式的类型
    • 否则,如果存在从Y到X的隐式枚举转换(§11.2.4(,则X是条件表达式的类型
    • 否则,如果从Y到X存在隐式转换(§11.2(,但从X到Y不存在,则X是条件表达式的类型
    • 否则,无法确定任何表达式类型,并且会发生编译时错误
  • 如果x和y中只有一个具有类型,并且x和y都可以隐式转换为该类型,那么这就是条件的类型表达
  • 否则,无法确定任何表达式类型,并且会发生编译时错误

示例

char Y = 'A';
int X = Y;
Y = X; // compiler error

简而言之,没有从intchar的隐式转换,但有从charint的转换,因此结果类型为int是有意义的

最新更新