Hi Ruben,
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.