代码
public class MyClass
{
public const Decimal CONSTANT = 0.50; // ERROR CS0664
}
产生此错误:
错误CS0664:double类型的文字无法隐式转换为 输入“十进制”;使用“M”后缀创建这种类型的文字
如记录。但这有效:
public class MyClass
{
public const Decimal CONSTANT = 50; // OK
}
他们为什么禁止第一个?我觉得很奇怪。
不带m
后缀的文字
的类型是
double
- 就这么简单。您也无法以这种方式初始化
float
:
float x = 10.0; // Fail
文字的类型应该从文字本身就清楚,并且它分配给的变量的类型应该可以从该文字的类型分配给
from。因此,您的第二个示例之所以有效,是因为存在从 int
(文字类型)到
decimal
的隐式转换。没有从
double
到
decimal
的隐式转换(因为它可能会丢失信息)。就我个人而言,如果没有
默认值或者默认值是decimal
,我会更喜欢它,但那是另一回事......
我想在不损失精度的情况下不可能将双精度数转换为十进制数,但使用整数就可以了。因此它们允许使用整数进行隐式转换。
它可能源于
double
可能会失去精度,并且他们不希望您存储该损失。
int
没有这个问题。