为了账号安全,请及时绑定邮箱和手机立即绑定

从枚举属性获取枚举

从枚举属性获取枚举

慕标琳琳 2019-11-19 08:52:57
我有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与从组合框中选择的值匹配)。
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超12个赞

这是我用于此特定目的的几种扩展方法,我将它们重写为使用您的StringValueAttribute,但像Oliver一样,我在代码中使用了DescriptionAttribute。


    public static T FromEnumStringValue<T>(this string description) where T : struct {

        Debug.Assert(typeof(T).IsEnum);


        return (T)typeof(T)

            .GetFields()

            .First(f => f.GetCustomAttributes(typeof(StringValueAttribute), false)

                         .Cast<StringValueAttribute>()

                         .Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))

            )

            .GetValue(null);

    }

在.NET 4.5中,这可以变得稍微简单一些:


    public static T FromEnumStringValue<T>(this string description) where T : struct {

        Debug.Assert(typeof(T).IsEnum);


        return (T)typeof(T)

            .GetFields()

            .First(f => f.GetCustomAttributes<StringValueAttribute>()

                         .Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))

            )

            .GetValue(null);

    }

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


Als result = ComboBox.SelectedValue.FromEnumStringValue<Als>();

相反,这是一个从枚举值获取字符串的函数:


    public static string StringValue(this Enum enumItem) {

        return enumItem

            .GetType()

            .GetField(enumItem.ToString())

            .GetCustomAttributes<StringValueAttribute>()

            .Select(a => a.Value)

            .FirstOrDefault() ?? enumItem.ToString();

    }

并称之为:


string description = Als.NietBeantwoord.StringValue()


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信