如何在C ++ / CLI中定义用于属性的System :: Decimal文字?

时间:2013-03-15 15:34:29

标签: configuration attributes c++-cli decimal literals

据我所知,没有用于定义类型System::Decimal的编译时常量的文字后缀(与C#中的M后缀相比 - 即Decimal d = 100.5M)。此外,编译器拒绝以下代码:

literal System::Decimal myDecimal = 100.5;

如果我无法定义十进制文字,那么如何初始化一个需要小数作为其字段之一的属性?为了说明,请考虑以下代码:

using namespace System;

public ref class MyConfigElement : ConfigurationElement
{
public:

    [ConfigurationProperty("Money", DefaultValue = 500.0, IsRequired = false)]
    property Decimal Money { Decimal get(); void set(Decimal value); }
};

当前值500.0无效,因为它编译为double类型,然后由运行时拒绝,因为它与属性的类型(Decimal)不匹配。

是否可以正确初始化此属性的默认值?

1 个答案:

答案 0 :(得分:1)

尝试DefaultValue = static_cast<Decimal>(500.0)

只要不需要调用用户定义的转换函数,就可以在常量表达式中使用static_cast


如果不这样,可能使用一个常量表达式的全局变量?

const Decimal MyConfigElementMoneyDefault = 500.0;

public ref class MyConfigElement : ConfigurationElement
{
public:

    [ConfigurationProperty("Money", DefaultValue = MyConfigElementMoneyDefault, IsRequired = false)]
    property Decimal Money { Decimal get(); void set(Decimal value); }
};