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

时间:2018-11-02 05:07:05

标签: 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); 
}

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

输出

65
65

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

有人可以向我解释吗?谢谢!

1 个答案:

答案 0 :(得分:7)

'A'char,其值为65

但是,有一个技术解释说明了为什么会产生整数(而不是char的字符串表示形式),您可以在ECMA C# specifications

中找到它。

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