如何获取枚举的值?

4

我定义了一个枚举,就像这样

public Enum CompanyQuarters
{
     First=1,
     Second=2,
     Third=3,
     Fourth=4
}

我将它们绑定到下拉列表中,如下:
ddlCompQuarter.DataSource = Enum.GetNames(typeof(CompanyQuarters));
ddlCompQuarter.DataBind();

现在我想获取下拉列表的选定值,例如选择“second”,我想获取2?这样不起作用。
 int selectedVal = int.Parse(ddlCompQuarter.SelectedValue.ToString());

顺便问一下,“CompanyQuarters”是什么?(您只提供了“ActiveQuarters”) - sll
我的错,只是一个打字错误(已更正的帖子) - Zo Has
可能是重复的问题:如何通过键名获取枚举值 - Jim Garrison
8个回答

7
ActiveQuarters value = (ActiveQuarters)Enum.Parse(typeof(ActiveQuarters),ddlCompQuarter.SelectedValue.ToString());

如果您正在使用 .Net Framework 4 或更高版本,请参见Enum.TryParse

ActiveQuarters value;
Enum.TryParse<ActiveQuarters>(ddlCompQuarter.SelectedValue.ToString(), out value);

3

我在这里向您展示使用枚举的最佳方式:

public enum enumVIPBusinessPlanPaymentType {
    [Description("Monthly")]
    Monthly = 1,
    [Description("Paid In Full (PIF)")]
    PaidInFull = 2,
    [Description("Barter")]
    Barter = 3 }

创建一个EnumHelper.cs类来读取其值或描述

public static Int32 GetIntValue(Enum en)
    {
        Type type = en.GetType();
        return TemplateControlExtension.GetInt32(null, en);
    }

public static string GetStringNameFromValue(Enum en)
    {
        Type type = en.GetType();
        MemberInfo[] info = type.GetMember(en.ToString());
        if (info != null && info.Length > 0)
        {
            object[] attrs = info[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attrs != null && attrs.Length > 0)
            {
               return ((DescriptionAttribute)attrs[0]).Description;
            }
        }
        return TemplateControlExtension.GetString(null, en);
    }

我希望您能喜欢它。

不错,我喜欢你的方法,非常简洁。 - Zo Has

2
ActiveQuarters typedValue = (ActiveQuarters)Enum.Parse(typeof(ActiveQuarters), 
                                              ddlCompQuarter.SelectedValue);

// If you need numeric value
int numericValue = (int)typedValue;

2
CompanyQuarters comp= (CompanyQuarters)Enum.Parse(ddlCompQuarter.SelectedValue); 

2
你可以使用Enum.Parse
var val = (int)(ActiveQuarters)Enum.Parse(typeof(ActiveQuarters), 
                                          ddlCompQuarter.SelectedValue.ToString());

我认为你的代码有问题,你定义了ActiveQuarters枚举,但你却绑定了CompanyQuarters


1

你需要使用 Enum.Parse,然后就可以从 ComboBox 中获取你的枚举值。


1

在绑定下拉列表时,您必须设置文本和值属性。 对于值字段,您可以使用

Enum.GetValues(typeof(EnumProvider.CompanyQuarters))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接