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