亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從枚舉屬性獲取枚舉

從枚舉屬性獲取枚舉

慕標琳琳 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條經驗 獲得超13個贊

這是我用于此特定目的的幾種擴展方法,我將它們重寫為使用您的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 關注
  • 543 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號