为什么三元运算符根据要查找的值找不到强制转换类型
本文关键字:查找 找不到 类型 转换 三元 运算符 为什么 | 更新日期: 2023-09-27 18:31:04
这里的一个问题向我提出了一个问题:
C# 中的三元运算,例如x = y ? a : b
,使用 a
或 b
的类型来确定三元表达式的类型。为什么不使用x
的类型?在任何给定的情况下,它是否没有可以使用的预期返回类型?
编辑:为了清楚起见,当我说
为什么不使用
x
的类型?
我想我的意思是
为什么不先尝试使用
x
类型?
如文档所述:
- 如果 X 和 Y 的类型相同,则这是条件表达式。
- 否则,如果是隐式转换(部分6.1) 从 X 到 Y 存在,但不存在于 Y 到 X 之间,则 Y 是条件表达式的类型。
- 否则,如果是隐式转换(第 6.1 节)从 Y 到 X 存在,但不是从 X 到 Y,则 X 是条件表达式的类型。
- 否则,任何表达式类型都不能确定,并发生编译时错误。
这个过程可以从以下方面开始:
- 如果解析类型明确,则它是条件表达式的类型。
"在任何给定的情况下,难道没有预期的返回类型吗? 能用吗?
不。例如,考虑:
string s = Convert.ToString(y ? a : b);
ToString
方法有多个重载,它采用不同的数据类型。编译器需要知道表达式的类型,才能知道要使用哪个重载。