Подтвердить что ты не робот

Как установить постоянное десятичное значение

Я использую С# для установки значения по умолчанию для десятичного значения в моем классе конфигурации

public class ConfigSection : ConfigurationSection
{
        [ConfigurationProperty("paymentInAdvanceAmount", **DefaultValue = 440m**)]
        public decimal PaymentInAdvanceAmount
        {
            get { return (decimal)base["paymentInAdvanceAmount"]; }
            set { base["paymentInAdvanceAmount"] = value; }
        }
}

но он не будет скомпилирован и выдает ошибку

Аргумент атрибута должен быть константным выражением, typeof expression

Я нашел сообщение: "Это не ошибка." 1000M "- это просто сокращение" нового десятичного числа (1000) ", которое включает вызов метода, что означает, что он не считается константой. компиляция позволяет вам притворяться, что это постоянная большая часть времени, не означает, что вы можете все время".

Теперь, как мне это решить?

4b9b3361

Ответ 1

Наконец-то я узнал, что я вхожу в "440" вместо 440 м или 440. Он скомпилировался и хорошо работает

Ответ 2

Я обнаружил, что если вы установите значение по умолчанию для свойства decimal и указали это значение в кавычках, это не сработало для меня с помощью элемента управления WinForms и .NET 3.5.

Когда я щелкнул правой кнопкой мыши на свойстве в окне конструктора "Свойства" и выбрал опцию "Reset", я получил сообщение "Объект типа" System.String "не может быть преобразован в тип" System.Decimal ".

Чтобы заставить его работать, мне пришлось использовать тот же код, что и tphaneuf, предлагаемый i.e.

[DefaultValue(typeof(Decimal), "440")]
public decimal TestValue { get; set; }

Ответ 3

Просто используйте 440 и оставьте "М". Я не получаю ошибок компиляции, и эта программа работает как ожидалось:

namespace WindowsApplication5
{
    public partial class Form1 : Form
    {
        public Form1( )
        {
            InitializeComponent( );
            AttributeCollection attributes = 
                TypeDescriptor.GetProperties( mTextBox1 )[ "Foo" ].Attributes;           
            DefaultValueAttribute myAttribute =
               ( DefaultValueAttribute ) attributes[ typeof( DefaultValueAttribute ) ];

            // prints "440.1"
            MessageBox.Show( "The default value is: " + myAttribute.Value.ToString( ) );
        }
    }

    class mTextBox : TextBox
    {
        private decimal foo;       
        [System.ComponentModel.DefaultValue( 440.1 )]
        public decimal Foo
        {
            get { return foo; }
            set { foo = value; }
        }
    }
}

Ответ 4

Вы должны поместить 440 внутри кавычек, например:

[ConfigurationProperty("paymentInAdvanceAmount", DefaultValue = "440")]