2017-06-05 51 views
2

無論如何要隱式執行以下模式?C#中有沒有什麼方法可以爲默認值設置的屬性自動設置DefaultValueAttribute?

[DefaultValue(true)] 
    public bool SomeBooleanProperty { get; set; } = true; 

重複在兩個位置中的默認值似乎只是在某處被乞討的錯誤,並在任何情況下顯得很是多餘的。我可以想象一些將DefaultValueAttribute自動設置爲默認值(或任何值)的情況是不可取的,但我認爲這些將是例外而不是規則。在這些情況下,解決方案只需要在構造函數中設置默認值,而不是在聲明中,我認爲這比冗餘代碼更少繁瑣。

+0

據我所知,將默認值屬性僅那兒告訴屬性網格有什麼屬性的默認值。它不會影響實際的默認值。但是,這是一個很好的問題。 +1。 –

+2

「私人常量」無法解決這個問題。如果你想了解一下設計師在執行你寫的任何代碼之前可以知道默認設置是什麼*,那麼這樣一個const必須被使用兩次可以直觀地顯而易見。只是顛倒邏輯,以便'假'是默認的另一種方法來提前。 –

+0

以及我會建議你只是反轉邏輯,以便默認爲false。生病嘗試一個例子。如果屬性名稱爲「已啓用」,則默認情況下它始終處於關閉狀態,但如果將其名稱更改爲「已禁用」,則默認情況下它始終爲開啓狀態。也許我的例子不是最好的,但你明白了,改變措辭,以使默認的錯誤是正確的。 – Seabizkit

回答

5

MSDN說,這對DefaultValueAttribute

一個DefaultValueAttribute不會造成一名成員與屬性的值自動 初始化。您必須在代碼中設置初始值 。

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); 
    } 
} 
相關問題