2011-12-02 29 views
3

列挙型プロパティのデフォルト値を設定するにはどうすればよいですか?列挙型プロパティの既定値を宣言する方法は?

例えば:

public enum SearchBoxMode { Instant, Regular }; 


[DefaultValue(SearchBoxMode.Instant)] 
public SearchBoxMode Mode { get { return mode; } set { mode = value; } }  

[DefaultValue((int)SearchBoxMode.Instant)] 
public SearchBoxMode Mode { get { return mode; } set { mode = value; } }  

[DefaultValue(SearchBoxMode.GetType(), "Instant")] 
public SearchBoxMode Mode { get { return mode; } set { mode = value; } }  

[DefaultValue(SearchBoxMode.GetType(), "SearchBoxMode.Instant")] 
public SearchBoxMode Mode { get { return mode; } set { mode = value; } }  

無関係の質問:どのように私は、列挙のTypeを得るのですか?例えば

Type type = DialogResult.GetType(); 

は機能しません。

+1

このコードはコンパイルされません。属性値は定数でなければなりません。関数呼び出し、変数、または計算値にすることはできません。 – Amy

+0

@Inuyahaコードが動作しない/コンパイルしていることを知っています - 私は "研究努力"で自分の(失敗した)試みを示していました。 (迷惑にならない限り質問に答えることを拒否する人もいる) –

答えて

9

enumのデフォルト値は、0がではなく、その列挙型に対してと定義されていても、0となります。何か他のものには、例えば、手動で行う必要があります:

SearchBoxMode mode = SearchBoxMode.Instant; // field initializer 

シリアライズとPropertyGridなどの[DefaultValue(...)]のみ影響を与えるものを使用する - それは実際にその値にプロパティのデフォルトを作成しません。正しい構文は、あなたの最初の例のようである:

SearchBoxMode mode = SearchBoxMode.Instant; 
[DefaultValue(SearchBoxMode.Instant)] 
public SearchBoxMode Mode { get { return mode; } set { mode = value; } } 

別のアプローチは、コンストラクタである:2番目の質問の再

[DefaultValue(SearchBoxMode.Instant)] 
public SearchBoxMode Mode { get; set; } 

public YourType() { 
    Mode = SearchBoxMode.Instant; 
} 

typeof(DialogResult)

関連する問題