我正在使用在线转换工具将VB代码转换为C#。 VB代码是:
Private Const constant1 As Decimal = CDec(37.5)
结果:
private const decimal constant1 = Convert.ToDecimal(37.5);
但是,编译时会出现错误消息:
表达式分配给' constant1'必须是不变的
为了消除错误,我将代码修改为:
private const decimal constant1 = (decimal)37.5;
有人可以建议为什么Convert.ToDecimal不能返回常量吗?
答案 0 :(得分:4)
如果您要转换的值不变,则此处不需要Convert.ToDecimal
(或CDec
)。
您可以简单地写一下:
private const decimal constant1 = 37.5m;
答案 1 :(得分:2)
编译常量时,实际值存储在程序集的元数据中。这意味着它在运行时根本无法更改。实际上,使用程序集假设它永远不会更改并将值编译到其元数据中。
使用Convert.ToDecimal()
时,您正在执行运行时代码。因此,该值不能分配给常量,因为在将值编译到程序集中时运行代码是不可能的(至少没有一些编译器黑客)。
正如@AlexD所提到的,如果你使用静态只读值,你可以在运行时设置它,因为它没有被编译到程序集中。
private static readonly decimal constant1 = Convert.ToDecimal(36.6);
答案 2 :(得分:1)
不,方法返回值与const
不兼容(因为它们很好,不是常数,至少不是编译器)。但是你可以摆脱函数(和强制转换!)并使用十进制文字(" m"后缀):
private const decimal constant1 = 37.5m;