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

Chr*_*eld 4 c# console-application

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

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

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

产量

65
65
Run Code Online (Sandbox Code Playgroud)

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

有人可以解释一下吗?谢谢!

AAA*_*ddd 7

'A'是一个char有价值的65

但是,有一个技术解释为什么这导致一个整数(而不是char的字符串表示),你可以在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
Run Code Online (Sandbox Code Playgroud)

总之,没有来自隐式转换int到char,但存在从char到int,因此是有意义的结果类型是一个int