我正在使用C#为我的配置类
中的十进制值设置默认值public class ConfigSection : ConfigurationSection
{
[ConfigurationProperty("paymentInAdvanceAmount", **DefaultValue = 440m**)]
public decimal PaymentInAdvanceAmount
{
get { return (decimal)base["paymentInAdvanceAmount"]; }
set { base["paymentInAdvanceAmount"] = value; }
}
}
但它不会被编译并抛出错误
属性参数必须是常量表达式,typeof expression
我找到一个帖子说:“这不是一个错误。”1000M“只是”新十进制(1000)“的简写,它涉及一个方法调用,这意味着它不被视为常数。仅仅因为编译让你在大多数时间假装它是一个常数,并不意味着你可以一直这样。“
现在,我该如何解决它?
答案 0 :(得分:11)
我终于发现它输入“440”而不是440m或440。 它编译好并运行良好
答案 1 :(得分:5)
我发现如果你设置一个十进制属性的默认值并用引号指定该值,它对我来说对WinForms控件和.NET 3.5不起作用。
当我在设计器“属性”窗口中右键单击属性并选择“重置”选项时,我收到消息“类型为'System.String'的对象'无法转换为'System.Decimal'类型。< / p>
为了使它工作,我必须使用与tphaneuf建议相同的代码,即
[DefaultValue(typeof(Decimal), "440")]
public decimal TestValue { get; set; }
答案 2 :(得分:2)
只需使用440并省略'M'。我没有编译错误,这个程序按预期工作:
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; }
}
}
}
答案 3 :(得分:1)
你应该在引号内放置440,如下所示:
[ConfigurationProperty("paymentInAdvanceAmount", DefaultValue = "440")]