隐式变量声明和三元赋值

Implicit variable declaration and ternary assignment

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

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

为什么编译器总是将 yesCount 编译为小数? 这是经过什么过程推导出来的?

a ternary operator which returns an int or a decimal

事实并非如此。三元运算符只能有 one return 类型。所以编译器将此 return 类型推断为 decimal,因为你的运算符 return 的第二部分是 decimal 并且第一部分的 int 可以 隐式 转换为 decimal.

并且由于该运算符的 return 类型是 decimal,因此您的 var yesCount 也是 decimal

您的三元运算符有两个操作数:一个整数和一个小数。右边的操作数是小数,因为你用 m 后缀,这意味着 decimal.

编译器非常聪明,它可以使用隐式强制转换来确定哪种类型最适合输出变量。由于 int 可以隐式转换为 decimal,但反之则不行,因此 decimal 是最合适的。 floatdouble 也是如此。 double 获胜。