我对以下代码的输出感到惊讶
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
我想知道这是怎么发生的。
有人可以向我解释吗?谢谢!
答案 0 :(得分:7)
'A'
是char
,其值为65
但是,有一个技术解释说明了为什么会产生整数(而不是char的字符串表示形式),您可以在ECMA C# specifications
中找到它。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