我有以下的自動屬性默認值屬性不符合我的自動屬性工作
[DefaultValue(true)]
public bool RetrieveAllInfo { get; set; }
,當我嘗試使用它的代碼我發現默認爲false是false
裏面我認爲這是默認值一個bool
變量,有沒有人有線索有什麼不對?!
我有以下的自動屬性默認值屬性不符合我的自動屬性工作
[DefaultValue(true)]
public bool RetrieveAllInfo { get; set; }
,當我嘗試使用它的代碼我發現默認爲false是false
裏面我認爲這是默認值一個bool
變量,有沒有人有線索有什麼不對?!
DefaultValue屬性僅用於告知Visual Studio設計器(例如,在設計表單時)屬性的默認值是什麼。它不會在代碼中設置屬性的實際默認值。
謝謝Philippe,所以我認爲唯一的解決方案是來自構造函數。謝謝 – 2009-12-31 06:39:21
[DefaultValue]
僅由(例如)序列化的API(如XmlSerializer
),和一些用戶界面元素(如PropertyGrid
)。它沒有設置值本身;你必須使用一個構造函數爲:
public MyType()
{
RetrieveAllInfo = true;
}
或手動設置字段,即不使用自動實現的屬性:
private bool retrieveAllInfo = true;
[DefaultValue(true)]
public bool RetrieveAllInfo {
get {return retrieveAllInfo; }
set {retrieveAllInfo = value; }
}
一劈爲這是對this鏈接。
總之,在構造函數的末尾調用這個函數。
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);
}
}
這是危險的,不應該使用。在派生類有機會設置使屬性設置器工作所需的任何內容之前,這會在基類構造函數完成之前設置派生類的屬性。 – hvd 2013-06-21 10:41:14
[Similar questions](http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties)。在VS2015中:'public bool RetrieveAllInfo {get;組; } = true;'這是[C#6](https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-in-c-6/)功能。 – marbel82 2016-11-08 13:17:06