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

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

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

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

3 ответа

Решение

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

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

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

public MyType()
{
    RetrieveAllInfo = true;
}

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

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

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

Вкратце, вызовите эту функцию в конце конструктора.

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);
        }
   }
Другие вопросы по тегам