Атрибут DefaultValue не работает с моим Автообъектом

У меня есть следующее свойство Auto

[DefaultValue(true)]
public bool RetrieveAllInfo { get; set; }

когда я пытаюсь использовать его внутри кода, я обнаруживаю, что значение false по умолчанию равно false Я предполагаю, что это значение по умолчанию для переменной bool, кто-нибудь знает, что не так!?

Ответы

Ответ 1

Атрибут DefaultValue используется только для указания конструкторам Visual Studio (например, при разработке формы), каков значение по умолчанию для свойства. Он не устанавливает фактическое значение по умолчанию для атрибута в коде.

Дополнительная информация здесь: http://support.microsoft.com/kb/311339

Ответ 2

[DefaultValue] используется только (например) API-интерфейсами сериализации (например, XmlSerializer) и некоторыми элементами пользовательского интерфейса (например, PropertyGrid). Он не устанавливает значение самого значения; вы должны использовать для этого конструктор:

public MyType()
{
    RetrieveAllInfo = true;
}

или установите это поле вручную, то есть не используя автоматически реализованное свойство:

private bool retrieveAllInfo = true;
[DefaultValue(true)]
public bool RetrieveAllInfo {
    get {return retrieveAllInfo; }
    set {retrieveAllInfo = value; }
}

Ответ 3

Один взлом для этого находится на этой ссылке.

Короче говоря, вызовите эту функцию в конце конструктора.

static public void ApplyDefaultValues(object self)
   {
        foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(self)) {
            DefaultValueAttribute attr = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
            if (attr == null) continue;
            prop.SetValue(self, attr.Value);
        }
   }