Chr*_*eld 4 c# console-application
我对以下代码的输出感到惊讶
public static void Main(string[] args)
{
char x = 'A';
int i = 0;
Console.WriteLine (true ? x : 0);
Console.WriteLine(false ? i : x);
}
Run Code Online (Sandbox Code Playgroud)
当我阅读C#面试问题时,我看到了这段代码,上面代码的输出是
产量
65
65
Run Code Online (Sandbox Code Playgroud)
我想知道这是怎么发生的.
有人可以解释一下吗?谢谢!
'A'是一个char有价值的65
但是,有一个技术解释为什么这导致一个整数(而不是char的字符串表示),你可以在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
Run Code Online (Sandbox Code Playgroud)
总之,没有来自隐式转换int到char,但存在从char到int,因此是有意义的结果类型是一个int