首页 > 解决方案 > 使用条件运算符 (?:) 时,控制台将 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

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

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

标签: c#console-application

解决方案


'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

简而言之,没有从 to 的隐式转换intchar但是有 from charto int,所以结果类型是一个有意义的int


推荐阅读