我有一个具有大量属性(大约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
?
答案 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);
}
}
}
}