如何从DefaultValue属性分配属性值

时间:2013-09-26 06:54:26

标签: c#

我有一个具有大量属性(大约30个)的类,例如

 [DisplayName("Steps to stacker"), DefaultValue(20)]
 [Description("Value in obturator steps")]
 public int StepsToStacker { get; set; }

 [DisplayName("Enter time"), DefaultValue(120)]
 [Description("Value in milliseconds")]
 public int EnterTime { get; set; }

是否有一种简单的方法可以实现从LoadDefaultValues() atrribute加载值的DefaultValue

2 个答案:

答案 0 :(得分:1)

虽然该属性的预期用途并非实际设置属性的值,但您仍可以使用反射来始终设置它们。

foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(this))
        {
            DefaultValueAttribute myAttribute = (DefaultValueAttribute)property.Attributes[typeof(DefaultValueAttribute)];

            if (myAttribute != null)
            {
                property.SetValue(this, myAttribute.Value);
            }
        }

答案 1 :(得分:0)

抱歉,我的qustion id重复了。这段代码工作正常

public void LoadDefaultValues()
{
   foreach (PropertyInfo p in this.GetType().GetProperties())
   {
       foreach (Attribute attr in p.GetCustomAttributes(true))
       {
           if (attr is DefaultValueAttribute)
           {
                DefaultValueAttribute dv = (DefaultValueAttribute)attr;
                p.SetValue(this, dv.Value, null);
           }
        }
    }
}