为什么编译器不能决定类型

时间:2011-06-28 02:22:37

标签: c# .net implicit-conversion

我很想知道为什么我们需要为小数类型附加m或M?

Documentation says there is no implicit conversion

我认为编译器有足够的信息,因为我们声明了Decimal关键字。

有人可以解释为什么编译器不能确定应该将值视为 小数但不是双倍。

1 个答案:

答案 0 :(得分:5)

如果你有这样的陈述

decimal x = 5.6;

编译器首先只查看赋值的右侧(5.6),确定其类型(double),然后检查结果是否可以分配给左侧的变量 - 手边(x)。

由于x被声明为decimal,但编译器已确定表达式为double类型(并且没有从double到{{1}的隐式转换}},分配无效。

(此规则的唯一例外是将lambda表达式赋给委托变量。在这种情况下,编译器确实使用左侧的信息来确定右侧的类型。)