DefaultValue属性不适用于我的自动属性
我有以下自动属性
[DefaultValue(true)] public bool RetrieveAllInfo { get; set; }
当我尝试在代码中使用它时我发现默认的false为false
我认为这是bool
变量的默认值,有没有人知道什么是错的!?
DefaultValue属性仅用于告诉Visual Studio设计者(例如在设计表单时)属性的默认值。 它不会在代码中设置属性的实际默认值。
更多信息: http : //support.microsoft.com/kb/311339
[DefaultValue]
仅由(例如)序列化API(如XmlSerializer
)和一些UI元素(如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); } }