1

たとえば、多数のプロパティ (約 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()属性からどのロード値を実装する簡単な方法はありDefaultValueますか?

4

2 に答える 2

1

この属性の使用目的は、実際にプロパティの値を設定することではありませんが、リフレクションを使用して常に値を設定することができます。

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

            if (myAttribute != null)
            {
                property.SetValue(this, myAttribute.Value);
            }
        }
于 2013-09-26T07:06:58.240 に答える
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);
           }
        }
    }
}
于 2013-09-26T07:08:26.317 に答える