一千萬個為什麽

搜索

從枚舉屬性獲取枚舉

我有

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 匹配從組合框中選擇的值)。

最佳答案

這是一個幫助方法,應該指向正確的方向。

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(ComboBox.SelectedValue);

這可能不是最佳解決方案,因為它與 Als 相關聯,您可能希望使此代碼可重用。您可能想要從我的解決方案中刪除代碼以返回屬性值,然後只需使用 Enum.Parse ,就像您在問題中所做的那樣。

轉載註明原文: 從枚舉屬性獲取枚舉