Атрибут 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);
}
}