我有一个隐式变量yesCount
,它由一个返回int或decimal的三元运算符初始化。
List<int> simulationsCounters= new List<int>();
simulationsCounters.Add(5);
var yesCount = simulationsCounters.Length > 0
? simulationsCounters[0]
: 0m;
为什么编译器总是将yesCount编译为小数? 推断出这个过程是什么过程?
答案 0 :(得分:6)
返回int或小数的三元运算符
事实并非如此。三元运算符只能有一个返回类型。因此,编译器将此返回类型推导为decimal
,因为运算符的secod部分返回decimal
,第一部分的int
可以隐式进行转换到decimal
。
由于该运算符的返回类型为decimal
,因此var yesCount
也是decimal
。
答案 1 :(得分:2)
您的三元运算符有两个操作数:整数和小数。右手操作数是小数,因为您使用m
对其进行后缀,这意味着decimal
。
编译器很聪明,它可以使用隐式转换来确定哪种类型最适合输出变量。由于int
可以隐式投放到decimal
,而不是相反,decimal
最适合。float
。 double
与double
的情况也是如此。 xlContinuous
获胜。