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

C# Console.WriteLine prints a Char type as Integer

我不明白为什么打印 char 数据类型一次是 char,另一次是 integer

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。为什么?

ternary/conditional 运算符 ? 需要以下所有三个操作数:

  1. 计算结果为布尔值的表达式
  2. return任何类型值的表达式
  3. return是与#2
  4. 类型相同的值的表达式

return 值将始终是同一类型;这就是为什么 #2 和 #3 必须是同一类型的原因。

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

所以当你写

var x = flag ? 65 : 'A';

完全一样

int x = flag ? (int)65 : (int)'A';

...并且将始终 return 一个 int

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

另外,你可以这样写:

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

...因为没有从 "A" 到整数的隐式转换。