我不明白为什么这个打印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
。为什么呢?
答案 0 :(得分: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"到整数。