2

据我所知,定义类型的编译时常量没有文字后缀System::Decimal(与 C# 中的 M 后缀相比,即 ie 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 在编译为 type 时是无效的,然后它被运行时拒绝,因为它与属性 ( )double的类型不匹配。Decimal

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

4

1 回答 1

1

试试DefaultValue = static_cast<Decimal>(500.0)

允许在常量表达式中使用 of 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); }
};
于 2013-03-15T15:37:18.863 回答