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 运算符 ?
需要以下所有三个操作数:
- 计算结果为布尔值的表达式
- return任何类型值的表达式
- return是与#2
类型相同的值的表达式
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" 到整数的隐式转换。
我不明白为什么打印 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 运算符 ?
需要以下所有三个操作数:
- 计算结果为布尔值的表达式
- return任何类型值的表达式
- return是与#2 类型相同的值的表达式
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" 到整数的隐式转换。