C# 关于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” 已指定,但从未使用其
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”。
[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属性应该强制执行常量的行为,但为了保持简单,它有点像烟雾和镜子。你的问题比乍一看要复杂一些。当然,解决方法是使用常量。:)