为什么三元运算符不会根据要查找的值找到类型?

时间:2013-09-12 22:27:35

标签: c#

问题here向我提出了一个问题:

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

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

  

为什么不使用x的类型?

我想我的意思是

  

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

正如文件所述:

  • 如果X和Y是相同的类型,那么这就是它的类型 条件表达式。
  • 否则,如果是隐式转换(Section 6.1)从X到Y存在,但不是从Y到X,则Y是条件表达式的类型。
  • 否则,如果是隐式转换 (第6.1节)存在从Y到X,但不是从X到Y,然后X是 条件表达式的类型。
  • 否则,没有表达式类型可以 确定,并发生编译时错误。

这个过程可以从:

开始
  • 如果分辨率类型是明确的,那么它就是条件表达式的类型。

1 个答案:

答案 0 :(得分:9)

  

“在任何给定的情况下,不存在预期的返回类型   可以用?“

没有。考虑例如:

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

ToString方法存在多个重载,它们采用不同的数据类型。编译器需要知道表达式的类型是什么来知道要使用哪个重载。