为什么三元运算符根据要查找的值找不到强制转换类型

本文关键字:查找 找不到 类型 转换 三元 运算符 为什么 | 更新日期: 2023-09-27 18:31:04

这里的一个问题向我提出了一个问题:

C# 中的三元运算,例如x = y ? a : b,使用 ab 的类型来确定三元表达式的类型。为什么不使用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方法有多个重载,它采用不同的数据类型。编译器需要知道表达式的类型,才能知道要使用哪个重载。