2

私が知る限り、型のコンパイル時定数を定義するためのリテラル サフィックスはありませんSystem::Decimal(C# の M サフィックスと比較して、つまりDecimal d = 100.5M)。さらに、次のコードはコンパイラによって拒否されます。

literal System::Decimal myDecimal = 100.5;

10 進リテラルを定義できない場合、フィールドの 1 つとして 10 進を必要とする属性をどのように初期化できますか? 説明のために、次のコードを検討してください。

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

この属性のデフォルト値を正しく初期化できますか?

4

1 に答える 1

1

試してみてくださいDefaultValue = static_cast<Decimal>(500.0)

static_castユーザー定義の変換関数を呼び出す必要がない限り、定数式でof を使用できます。


それができない場合は、定数式であるグローバル変数を使用できますか?

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 に答える