8

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

c# 中的三元运算,比如x = y ? a : b,使用其中一个的类型ab来确定三元表达式的类型。为什么不使用的类型x?在任何给定的情况下,是否没有可以使用的预期返回类型?

编辑:为了清楚起见,当我说

为什么不使用的类型x

我想我的意思是

为什么不先尝试使用的类型x

正如文档所述:

  • 如果 X 和 Y 是相同的类型,那么这是条件表达式的类型。
  • 否则,如果存在从 X 到 Y 的隐式转换(第 6.1 节),但不存在从 Y 到 X 的转换,则 Y 是条件表达式的类型。
  • 否则,如果存在从 Y 到 X 的隐式转换(第 6.1 节),但不存在从 X 到 Y 的隐式转换,则 X 是条件表达式的类型。
  • 否则,无法确定表达式类型,并出现编译时错误。

这个过程可以从以下开始:

  • 如果解析类型是明确的,那么它就是条件表达式的类型。
4

1 回答 1

9

“在任何给定的情况下,是否没有可以使用的预期返回类型?”

不,例如考虑:

string s = Convert.ToString(y ? a : b);

ToString采用不同数据类型的方法有多个重载。编译器需要知道表达式的类型是什么才能知道使用哪个重载。

于 2013-09-12T22:42:11.380 回答