小编典典

从枚举属性获取枚举

c#

我有

public enum Als 
{
    [StringValue("Beantwoord")] Beantwoord = 0,
    [StringValue("Niet beantwoord")] NietBeantwoord = 1,
    [StringValue("Geselecteerd")] Geselecteerd = 2,
    [StringValue("Niet geselecteerd")] NietGeselecteerd = 3,
}

public class StringValueAttribute : Attribute
{
    private string _value;

    public StringValueAttribute(string value)
    {
        _value = value;
    }

    public string Value
    {
        get { return _value; }
    }
}

我想将我从组合框选择的项目中的值放入一个int:

int i = (int)(Als)Enum.Parse(typeof(Als), (string)cboAls.SelectedValue); //<- WRONG

这可能吗?如果可以,怎么办?(StringValue与从组合框中选择的值匹配)。


阅读 283

收藏
2020-05-19

共1个答案

小编典典

这是一个帮助方法,可以为您指明正确的方向。

protected Als GetEnumByStringValueAttribute(string value)
{
    Type enumType = typeof(Als);
    foreach (Enum val in Enum.GetValues(enumType))
    {
        FieldInfo fi = enumType.GetField(val.ToString());
        StringValueAttribute[] attributes = (StringValueAttribute[])fi.GetCustomAttributes(
            typeof(StringValueAttribute), false);
        StringValueAttribute attr = attributes[0];
        if (attr.Value == value)
        {
            return (Als)val;
        }
    }
    throw new ArgumentException("The value '" + value + "' is not supported.");
}

要调用它,只需执行以下操作:

Als result = this.GetEnumByStringValueAttribute<Als>(ComboBox.SelectedValue);

尽管这可能不是最好的解决方案,但它Als可能与之相关,您可能想使此代码可重复使用。您可能想要从我的解决方案中删除代码以返回属性值,然后Enum.Parse按您在问题中所使用的方式进行操作。

2020-05-19