C#Console.WriteLine将Char类型打印为Integer

时间:2018-01-20 00:14:52

标签: c# char console.writeline

我不明白为什么这个打印char数据类型一次为char,其他时间为整数

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

我希望输出为A, A, A,但上面的输出为A, 65, 65。为什么呢?

1 个答案:

答案 0 :(得分:2)

三元/条件运算符?需要以下三个操作数:

  1. 计算结果为布尔值
  2. 的表达式
  3. 返回任何类型值的表达式
  4. 返回与#2相同类型的值的表达式
  5. 返回值将始终为相同类型;这就是#2和#3必须是同一类型的原因。

    如果第三个操作数与第二个操作数的类型不同,编译器将查找隐式转换并尽可能使用它。

    所以当你写

    var x = flag ? 65 : 'A';
    

    完全相同
    int x = flag ? (int)65 : (int)'A';
    

    ...并始终返回int

    如果不是这种情况,?的结果无法分配给强类型变量,这将是一个严重的障碍。

    此外,您可以写下这样的内容:

    var x = flag ? 65 : "A"; //Notice it's a string and not a char
    

    ...因为没有来自" A"到整数。