如何声明枚举属性的默认值?

Ian*_*oyd 4 c# default properties

如何设置枚举属性的默认值?

例如:

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;  } }    
Run Code Online (Sandbox Code Playgroud)

无关的问题:我如何获得Type枚举?例如

Type type = DialogResult.GetType();
Run Code Online (Sandbox Code Playgroud)

不起作用.

Mar*_*ell 9

enum的默认值是underyling类型的0,即使没有为该枚举定义 0 .其他任何东西必须手动完成,例如:

SearchBoxMode mode = SearchBoxMode.Instant; // field initializer
Run Code Online (Sandbox Code Playgroud)

使用[DefaultValue(...)]仅影响序列化等事情PropertyGrid- 它实际上并不使该属性默认为该值.正确的语法是根据您的第一个示例:

SearchBoxMode mode = SearchBoxMode.Instant;
[DefaultValue(SearchBoxMode.Instant)]
public SearchBoxMode Mode { get { return mode; } set { mode = value;  } }  
Run Code Online (Sandbox Code Playgroud)

另一种方法是构造函数:

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

public YourType() {
    Mode = SearchBoxMode.Instant;
}
Run Code Online (Sandbox Code Playgroud)

第二个问题; typeof(DialogResult)