Get default value of class member

后端 未结 4 1307
灰色年华
灰色年华 2020-12-16 05:56

Let\'s assume I have a class ClassWithMember

class ClassWithMember
{
    int myIntMember = 10;
}

How do I get the default value 10 of the m

4条回答
  •  囚心锁ツ
    2020-12-16 06:24

    If you're in control of the code for ClassWithMember, you could take a completely different approach to this by using the [DefaultValue] attribute from System.ComponentModel. Basically, what you'd do is write something like this:

    class ClassWithMember
    {
        public ClassWithMember()
        {
            SetDefaultValues();
        }
    
        [DefaultValue(5)]
        public MyIntMember { get; set; }
    }
    

    And then have a function like this somewhere, perhaps in a base class:

    public void SetDefaultValues()
    {
        foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(this))
        {
            DefaultValueAttribute a = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
            if (a == null) 
                continue;
            prop.SetValue(this, a.Value);
        }
    }
    

    So now, you have a situation where you can easily retrieve the default values using Reflection.

    Keep in mind that this is going to be quite a lot slower due to the Reflection requirement, so if this code gets instantiated a lot, you'll probably want to find a different approach. Also, it won't work with non-value types, due to a limitation with the .NET Framework's attribute support.

提交回复
热议问题