c#枚举 获取枚举键值对、描述等

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary dic1 = GetEnumItemDesc(typeof(Days));

            foreach (string key in dic1.Keys)
            {
                Console.WriteLine(key + ":{0}", dic1[key]);
            }


            Dictionary dic = GetEnumItemValueDesc(typeof(Days));
            foreach (string key in dic.Keys)
            {
                Console.WriteLine(key + ":{0}", dic[key]);
            }

            Console.WriteLine(string.Format(Days.Sunday.ToString() + ":{0}", GetEnumDesc(Days.Sunday)));
            Console.WriteLine(string.Format("{0}", (int)Enum.Parse(typeof(Days), "Thursday", true)));
            Console.ReadKey();
        }

        /// 
        /// 获取枚举项描述信息 例如GetEnumDesc(Days.Sunday)
        /// 
        /// 枚举项 如Days.Sunday
        /// 
        public static string GetEnumDesc(Enum en)
        {
            Type type = en.GetType();
            MemberInfo[] memInfo = type.GetMember(en.ToString());
            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                if (attrs != null && attrs.Length > 0)
                    return ((DescriptionAttribute)attrs[0]).Description;
            }
            return en.ToString();
        }

        ///
        /// 获取枚举项+描述
        ///
        ///Type,该参数的格式为typeof(需要读的枚举类型)
        ///键值对
        public static Dictionary GetEnumItemDesc(Type enumType)
        {
            Dictionary dic = new Dictionary();
            FieldInfo[] fieldinfos = enumType.GetFields();
            foreach (FieldInfo field in fieldinfos)
            {
                if (field.FieldType.IsEnum)
                {
                    Object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
                    dic.Add(field.Name, ((DescriptionAttribute)objs[0]).Description);
                }
            }
            return dic;
        }

        ///
        /// 获取枚举值+描述
        ///
        ///Type,该参数的格式为typeof(需要读的枚举类型)
        ///键值对
        public static Dictionary GetEnumItemValueDesc(Type enumType)
        {
            Dictionary dic = new Dictionary();
            Type typeDescription = typeof(DescriptionAttribute);
            FieldInfo[] fields = enumType.GetFields();
            string strText = string.Empty;
            string strValue = string.Empty;
            foreach (FieldInfo field in fields)
            {
                if (field.FieldType.IsEnum)
                {
                    strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
                    object[] arr = field.GetCustomAttributes(typeDescription, true);
                    if (arr.Length > 0)
                    {
                        DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                        strText = aa.Description;
                    }
                    else
                    {
                        strText = field.Name;
                    }
                    dic.Add(strValue, strText);
                }
            }
            return dic;
        }
    }

    public enum Days
    {
        [Description("星期天")]
        Sunday,
        [Description("星期一")]
        Monday,
        [Description("星期二")]
        Tuesday,
        [Description("星期三")]
        Wednesday,
        [Description("星期四")]
        Thursday,
        [Description("星期五")]
        Friday,
        [Description("星期六")]
        Saturday
    }
}



转载于:https://www.cnblogs.com/smartsmile/p/6234063.html

你可能感兴趣的:(c#枚举 获取枚举键值对、描述等)