我不明白为什么这个打印字符数据类型一次是字符,其他时间是整数
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
. 为什么?
三元/条件运算符?
需要以下所有三个操作数:
- 计算结果为布尔值的表达式
- 返回任何类型的值的表达式
- 返回与 #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"到整数的隐式强制转换。