【问题标题】:Can Convert.ToDecimal return a constant?Convert.ToDecimal 可以返回一个常量吗?
【发布时间】:2017-01-24 00:51:06
【问题描述】:

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

【问题讨论】:

标签: c# vb.net


【解决方案1】:

如果您要转换的值是恒定的,则此处不需要Convert.ToDecimal(或CDec)。

你可以简单地写:

private const decimal constant1 = 37.5m;

【讨论】:

    【解决方案2】:

    编译常量时,实际值存储在程序集的元数据中。这意味着它在运行时根本无法更改。事实上,使用程序集假定它永远不会改变,并将值编译到它们的元数据中。

    当您使用Convert.ToDecimal() 时,您正在执行运行时代码。因此,无法将值分配给常量,因为在将值编译到程序集中时无法运行代码(至少在没有一些编译器技巧的情况下不会)。

    正如@AlexD 提到的,如果您使用静态只读值,则可以在运行时设置它,因为它没有编译到程序集中。

    private static readonly decimal constant1 = Convert.ToDecimal(36.6);
    

    【讨论】:

      【解决方案3】:

      不,方法返回值与const 不兼容(因为它们不是常量,至少对于编译器来说不是)。但是,您可以摆脱函数(并强制转换!)并使用十进制文字(“m”后缀):

      private const decimal constant1 = 37.5m;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 2010-12-14
        • 2011-08-16
        • 2012-11-20
        相关资源
        最近更新 更多