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

Configuration 如何在C+;中定义用于属性的System::Decimal文字+/CLI?,configuration,attributes,c++-cli,decimal,literals,Configuration,Attributes,C++ Cli,Decimal,Literals,据我所知,没有文字后缀来定义编译时常量类型System::Decimal(与C#——即Decimal d=100.5M中的M后缀相比)。此外,编译器会拒绝以下代码: literal System::Decimal myDecimal = 100.5; 如果无法定义十进制文字,那么如何初始化需要十进制作为其字段之一的属性?为了说明,请考虑下面的代码: using namespace System; public ref class MyConfigElement : Configuration

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

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
)不匹配


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

尝试
DefaultValue=static\u cast(500.0)

只要不需要调用用户定义的转换函数,就可以在常量表达式中使用
static\u 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); }
};

不幸的是,这样做会产生错误C3101,该错误指出属性值必须是编译时常量(对于/clr:pure、/clr:safe和/clr)。@Steve:ok,这里的想法是即使在C中也不可能。