据我所知,没有用于定义类型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
)不匹配。
是否可以正确初始化此属性的默认值?
答案 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); }
};