我将枚举绑定到asp.net 4.0 C#中的下拉列表
枚举是:
public enum Frequency
{
[Description("Select a frequency")]
None,
[Description("Every Hour/Mintues")]
EveryHourOrMintues,
[Description("Previous Day Data")]
PreviousDayData,
[Description("Once a week")]
OnceaWeek
}
从下拉列表中选择一个值后,我想获得枚举值作为回报:
我这样做:
Frequency selectedFrequency;
foreach (Frequency f in Enum.GetValues(typeof(Frequency)))
{
if (f.ToString().Equals(this.dropDownListFrequency.SelectedValue))
{
selectedFrequency = f;
break;
}
}
通过遍历枚举中的每个项,它是可行的,但绝对是一种糟糕的方式(即使枚举很小)
我如何像这样检索选定的枚举:
Frequency selectedValue = Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => f.ToString().Equals(this.dropDownListFrequency.SelectedValue));
我了解以上给出的代码存在强制转换问题。
编辑
有关更多信息,这是我如何将枚举绑定到下拉列表
var frequencies = Enum.GetValues(typeof(Frequency)).Cast<Frequency>().Select(f => new
{
Text = f.ToDescriptiveTextUsingAttributes(),
Value = f.ToString()
});
this.dropDownListFrequency.DataSource=frequencies ;
this.dropDownListFrequency.DataTextField = "Text";
this.dropDownListFrequency.DataValueField = "Value";
ToDescriptiveTextUsingAttributes()是一种扩展方法,该方法返回枚举的Description属性的值
最佳答案
如果下拉列表的值是枚举的整数表示形式(例如0,1,2 ...),则只需将其转换回枚举即可:
Frequency f = (Frequency)int.Parse(dropDownListFrequency.SelectedValue);
如果下拉列表的值是枚举的字符串表示形式(例如“ None”,“ EveryHourOrMintues” ...),则可以使用
Enum.Parse()
:Frequency f = (Frequency)Enum.Parse(
typeof(Frequency), dropDownListFrequency.SelectedValue);
关于c# - 从下拉列表中检索选定的枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22603530/