c# - 使用条件运算符 (?:) 时,控制台将 char 显示为 int
问题描述
我对以下代码的输出感到惊讶
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
但是,对于为什么这会导致整数(而不是 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
简而言之,没有从 to 的隐式转换int
,char
但是有 from char
to int
,所以结果类型是一个有意义的int
推荐阅读
- android - 错误:风味“fdroid”没有风味维度
- java - Mac 中的 Eclipse WindowBuilder
- dart - 下载数据并保存在本地
- python - Pandas - 从字典列表创建 df
- xero-api - 您正在尝试使用已弃用的 TLS 1.0 连接到 Xero。请使用更新的 TLS 版本
- ios - 从一个视图控制器移动到另一个视图控制器不能快速工作
- scala - 扩展类时忽略更高种类的类型参数
- javascript - 在 JS 画布中计算鼠标和点之间的距离
- ibm-mq - AMQ9641:通道 IBM WebSphere MQ 客户端 8.0.0.9 的远程 CipherSpec 错误
- android - Android材料设计的“用户在线”绿点图标