Если вы управляете кодом для ClassWithMember, вы можете использовать совершенно другой подход, используя атрибут [DefaultValue]
из System.ComponentModel
. По сути, вы должны написать что-то вроде этого:
class ClassWithMember
{
public ClassWithMember()
{
SetDefaultValues();
}
[DefaultValue(5)]
public MyIntMember { get; set; }
}
А потом где-нибудь есть такая функция, возможно, в базовом классе:
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);
}
}
Итак, теперь у вас есть ситуация, когда вы можете легко получить значения по умолчанию, используя Reflection.
Имейте в виду, что это будет происходить намного медленнее из-за требования Reflection, поэтому, если этот код будет часто создаваться, вы, вероятно, захотите найти другой подход. Кроме того, он не будет работать с незначительными типами из-за ограничения поддержки атрибутов .NET Framework.