2013-09-26 8 views
1

У меня есть класс с большим кол-свойств (около 30), напримерКак присвоить значение свойства из DefaultValue атрибута

[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() значения, нагрузки от DefaultValue atrribute?

+0

'DefaultValue' вычерчен для кода' Designer' для 'Components'. Вы должны использовать отражение или установить его в конструкторе –

ответ

1

Хотя предполагаемое использование атрибута не означает фактически устанавливать значения свойств, вы можете использовать отражение, чтобы всегда устанавливать их в любом случае.

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

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

Извините, мой дубликат 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); 
      } 
     } 
    } 
} 
+0

как насчет моего ответа ??? –

Смежные вопросы