隐式变量声明和三元赋值

时间:2016-06-13 10:34:57

标签: c# c#-3.0

我有一个隐式变量yesCount,它由一个返回int或decimal的三元运算符初始化。

List<int> simulationsCounters= new List<int>();
simulationsCounters.Add(5);
var yesCount = simulationsCounters.Length > 0
     ? simulationsCounters[0]
     : 0m;

为什么编译器总是将yesCount编译为小数? 推断出这个过程是什么过程?

2 个答案:

答案 0 :(得分:6)

  

返回int或小数的三元运算符

事实并非如此。三元运算符只能有一个返回类型。因此,编译器将此返回类型推导为decimal,因为运算符的secod部分返回decimal,第一部分的int可以隐式进行转换到decimal

由于该运算符的返回类型为decimal,因此var yesCount也是decimal

答案 1 :(得分:2)

您的三元运算符有两个操作数:整数和小数。右手操作数是小数,因为您使用m对其进行后缀,这意味着decimal

编译器很聪明,它可以使用隐式转换来确定哪种类型最适合输出变量。由于int可以隐式投放到decimal,而不是相反,decimal最适合。floatdoubledouble的情况也是如此。 xlContinuous获胜。