【C#】枚举

枚举

复制代码
public static class CommonEnums
    {
        public enum people
        {
            /// <summary>
            ///男人
            /// </summary>
            [Description("男人")]
            man = 1,
            /// <summary>
            /// 女人
            /// </summary>
            [Description("女人")]
            women = 2,
        }
}
复制代码

string->枚举

CommonEnums.people en = (CommonEnums.people)Enum.Parse(typeof(CommonEnums.people), "women");

枚举->Dictionary

复制代码
//使用:生成一个dictionary
Dictionary<int, string> dic=CommonEnums.people.man.ToEnumDictionary();

//静态方法
public static class EnumExtension
    {
        public static Dictionary<int, string> ToEnumDictionary(this Enum enumT, string category = "")
        {
            Type enumType = enumT.GetType();
            if (!enumType.IsEnum) throw new Exception("参数不是枚举");

            var array = enumType.GetEnumValues();
            if (array.Length < 1) return new Dictionary<int, string>(1);
            Dictionary<int, string> result = new Dictionary<int, string>(array.Length);

            int[] enumValues = new int[array.Length];
            int index = 0;

            foreach (var item in array)
            {
                enumValues[index] = Convert.ToInt32(item);
                ++index;
            }

            var enumNames = enumType.GetEnumNames();
            DescriptionAttribute[] descriptions = null;
            CategoryAttribute[] categorys = null;

            for (index = 0; index < array.Length; ++index)
            {
                FieldInfo fi = enumType.GetField(enumNames[index]);
                descriptions = fi.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[];

                if (category != string.Empty)
                {
                    categorys = fi.GetCustomAttributes(typeof(CategoryAttribute), false) as CategoryAttribute[];
                    if (categorys != null && categorys.Length > 0)
                    {
                        if (categorys[0].Category != category)
                        {
                            continue;
                        }
                    }
                }

                if (descriptions != null && descriptions.Length > 0)
                {
                    result.Add(enumValues[index], descriptions[0].Description);
                }
                else
                {
                    result.Add(enumValues[index], string.Empty);
                }
            }

            return result;
        }
    }
复制代码

获取枚举描述

复制代码
//使用
string desc = CommonEnums.people.man.GetDescription();
//方法
public static string GetDescription(this Enum value, bool nameInstend = true)
        {
            Type type = value.GetType();
            string name = Enum.GetName(type, value);
            if (name == null)
            {
                return null;
            }
            FieldInfo field = type.GetField(name);
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attribute == null && nameInstend == true)
            {
                return name;
            }
            return attribute == null ? null : attribute.Description;
        }
复制代码

 

 

 

 

 

posted @   Doc.stu  阅读(286)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 并发编程 - 线程同步(二)
点击右上角即可分享
微信分享提示