我正在尝试使用const
修饰符,同时探索过多的C#教程,并在这样的类中放置了一堆const
修饰符,而没有在任何地方实际使用它们:
class ConstTesting
{
const decimal somedecimal = 1;
const int someint = 2;
...
}
通过这个课,我得到以下警告(使用csc):
ConstTesting.cs(3,19):警告CS0414:字段'ConstTesting.somedecimal' 已分配,但其值从未使用
我不明白的是我只收到const decimal
的警告。 const int
不会给我任何警告,无论顺序或类似的事情如何。
我的问题是,为什么会发生这种情况?为什么我的csc编译器会首先警告我const
,如果更重要的是为什么它只会警告我const decimal
当我'以完全相同的方式写const int
? int
和decimal
之间的差异究竟与它有什么关系?
请注意:
答案 0 :(得分:14)
Int是固定大小的简单值类型。由于规模,十进制有点复杂。如果您反编译代码,您会发现它看起来像这样:
[DecimalConstant(0, 0, 0, 0, 1)]
private readonly static decimal somedecimal;
private const int someint = 2;
其中十进制不是常量,但有一个DecimalConstant属性,由mscorlib.dll提供,其中十进制的真正定义是:
public struct Decimal : IFormattable, IComparable, IConvertible,
IDeserializationCallback, IComparable<decimal>, IEquatable<decimal>
this blog post涵盖了对此主题的更深入探索。