Convert.ToDecimal可以返回常量吗?

时间:2017-01-24 00:51:07

标签: c# vb.net

我正在使用在线转换工具将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不能返回常量吗?

3 个答案:

答案 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;