C# 十进制值使用0而不是0?

C# 十进制值使用0而不是0?,c#,C#,是否有必要为赋值和比较十进制变量的零值添加M decimal val; ... if (val == 0M) { } 或 我猜常量将在编译时转换,结果将是相同的。这不是必需的。整数类型为十进制。如果文本表示浮点数,则必须添加M后缀。不带类型后缀的浮点文本是双精度的,需要显式转换为十进制 decimal d = 1; // works decimal d2 = 1.0 // does not work decimal d3 = 1.0M // works 这里的文本0显然是整数

是否有必要为赋值和比较
十进制
变量的零值添加
M

decimal val;
...
if (val == 0M)
{
}


我猜常量将在编译时转换,结果将是相同的。

这不是必需的。整数类型为十进制。如果文本表示浮点数,则必须添加
M
后缀。不带类型后缀的浮点文本是
双精度的
,需要显式转换为
十进制

decimal d = 1;     // works
decimal d2 = 1.0   // does not work
decimal d3 = 1.0M  // works


这里的文本
0
显然是整数文本的一个特例。

这可能很有用:是的,
0
将在编译时隐式地表示为
decimal
;但是,我们必须将
M
放在
0.0
之后,因为“浮点类型和十进制类型之间没有隐式转换”,所以编译的IL是相同的,所以在这种情况下不需要。重复的问题,答案是:十进制的IL
=
调用bool[mscorlib]System.Decimal::op_Equality(valuetype[mscorlib]System.Decimal,valuetype[mscorlib]System.Decimal)
这里的当事人迟到了一点;我知道这不是必须的,但你觉得可读性怎么样?在我的应用程序中,我在每个长/十进制/双精度/浮点值中添加了特定的后缀
l
/
m
/
d
/
f
——因此,只要看到这个值,我就知道它的确切类型。好主意?还是太多?
decimal d = 1;     // works
decimal d2 = 1.0   // does not work
decimal d3 = 1.0M  // works