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); } }