我将枚举绑定到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/

10-17 02:23