我对以下代码的输出感到惊讶
public static void Main(string[] args)
{
char x = 'A';
int i = 0;
Console.WriteLine (true ? x : 0);
Console.WriteLine(false ? i : x);
}
当我读C#面试问题时,我看到了这个代码,上面代码的输出是
输出
65
65
我想知道这是怎么发生的。
有人能解释一下吗?谢谢
'A'
是char
,具有65
值
然而,有一个技术解释为什么这会导致一个整数(而不是字符的字符串表示(,你可以在ECMA C#规范中找到它
12.15条件运算符
?的第二个和第三个操作数x和y:操作员控制条件表达式的类型
- 如果x具有类型x并且y具有类型y,那么,
- 如果X和Y是同一类型,那么这就是条件表达式的类型
- 否则,如果从X到Y存在隐式转换(§11.2(,但从Y到X不存在,则Y是条件表达式的类型
- 否则,如果存在从X到Y的隐式枚举转换(§11.2.4(,则Y是条件表达式的类型
- 否则,如果存在从Y到X的隐式枚举转换(§11.2.4(,则X是条件表达式的类型
- 否则,如果从Y到X存在隐式转换(§11.2(,但从X到Y不存在,则X是条件表达式的类型
- 否则,无法确定任何表达式类型,并且会发生编译时错误
- 如果x和y中只有一个具有类型,并且x和y都可以隐式转换为该类型,那么这就是条件的类型表达
- 否则,无法确定任何表达式类型,并且会发生编译时错误
示例
char Y = 'A';
int X = Y;
Y = X; // compiler error
简而言之,没有从int
到char
的隐式转换,但有从char
到int
的转换,因此结果类型为int
是有意义的