C# 关于C中常量小数字段的混淆警告#

C# 关于C中常量小数字段的混淆警告#,c#,constants,C#,Constants,我在探索大量C#教程的同时,尝试了const修饰符,并将一堆const修饰符放在这样一个类中,而实际上没有在任何地方使用它们: class ConstTesting { const decimal somedecimal = 1; const int someint = 2; ... } 通过这个类,我得到以下警告(使用csc): ConstTesting.cs(3,19):警告CS0414:字段“ConstTesting.somedecimal” 已指定,但从未使用其

我在探索大量C#教程的同时,尝试了
const
修饰符,并将一堆
const
修饰符放在这样一个类中,而实际上没有在任何地方使用它们:

class ConstTesting
{
    const decimal somedecimal = 1;
    const int someint = 2;
    ...
}
通过这个类,我得到以下警告(使用csc):

ConstTesting.cs(3,19):警告CS0414:字段“ConstTesting.somedecimal” 已指定,但从未使用其值

我不明白的是,我只得到了常量十进制的警告。
const int
不会给我任何警告,不管顺序如何。

我的问题是,为什么会发生这种情况?为什么我的csc编译器首先会警告我一个
const
,如果它是那么重要为什么它只会在我以完全相同的方式编写
const int
时警告我一个
const decimal
int
decimal
之间的差异究竟与此有什么关系?

请注意:

    -我没有重拾器
    -我正在使用VS 2010
    -我100%确定在我的代码中任何地方都没有使用“const”。

Int是一种固定大小的简单值类型。由于比例的关系,十进制有点复杂。如果对代码进行反编译,您会发现它如下所示:

[DecimalConstant(0, 0, 0, 0, 1)]
private readonly static decimal somedecimal;

private const int someint = 2;
其中,十进制数不是常数,但有一个由mscorlib.dll提供的DecimalConstant属性,如果十进制数为:

public struct Decimal : IFormattable, IComparable, IConvertible,
IDeserializationCallback, IComparable<decimal>, IEquatable<decimal>
public struct Decimal:IFormattable、IComparable、IConvertible、,
IDeserializationCallback、IComparable、IEquatable

本节将对这一主题进行更深入的探讨

让我猜猜。在
代码中的某个地方,您使用的是
someint
,而不是
somedecimal
。这非常令人惊讶,但如果您没有使用指定的值,您会得到(等待)。。一个警告,告诉您它已分配但未使用!令人惊讶,不是吗?我很确定我在任何地方都没有使用。我很确定你在使用!试试公共类Foo{const int bar=2;}
,你会看到的。试试我刚才给你的类,它清楚地给出了警告。另外,右键单击该
someint
,然后按
Find Usages
。如果真的没有发现任何用法(这会令人惊讶),请清理该项目。@Elizion打开并搜索“const decimal ConstDecimal=5”可能会有所帮助。这会引出另一个问题,即更改
const decimal
的值是否与更改
const int
的值一样是一个突破性的更改。这很有趣。那么您是说,使用
常量十进制
实际上不是一个“真实的”
常量
?另外,非常感谢你不仅告诉我我是个白痴,还把我的
someint
用到了某个地方。这在技术上是正确的。DecimalConstant属性应该强制执行常量的行为,但为了保持简单,它有点像烟雾和镜子。你的问题比乍一看要复杂一些。当然,解决方法是使用常量。:)