我不明白为什么这个打印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
。为什么?
发布于 2018-01-20 00:20:40
三元/条件运算符?
需要以下所有三个操作数:
返回值将始终是相同的类型;这就是为什么#2和#3必须是相同类型的原因。
如果第三个操作数与第二个操作数的类型不同,编译器将查找隐式强制转换,并在可能的情况下使用它。
所以当你写
var x = flag ? 65 : 'A';
它和
int x = flag ? (int)65 : (int)'A';
...and将始终返回一个int
。
如果不是这样,则不能将?
的结果分配给强类型变量,这将是一个严重的障碍。
另外,您可以而不是编写如下内容:
var x = flag ? 65 : "A"; //Notice it's a string and not a char
...because没有从"A“到整数的隐式转换。
https://stackoverflow.com/questions/48351313
复制相似问题