C# Console.WriteLine 将 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. 为什么?

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

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

返回值将始终是相同的类型;这就是为什么 #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"到整数的隐式强制转换。

最新更新