c#将枚举转换成字典集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#将枚举转换成字典集合相关的知识,希望对你有一定的参考价值。

枚举在软件开发中的用途

1. 枚举类型(enum type)是具有一组命名常量的独特的值类型。

2. 枚举的定义:

 public enum Sex
        {
            男 = 0,
            女 = 1
        }

或者:如果只给男赋值,那么女=1

 public enum Sex
        {
            男 = 0,
            女 
        }

 

3. 我们在实际开发中,对于数据库的设计会经常需要很多状态字段(比如性别、审核状态、分类状态等等等等),而这些状态字段的值又只有固定的几个,这个时候我们一般会需要数据字典来维护这些数据。而数据字典该以什么形式存在呢?

以我自己的经验,我一般以两种方式来保存这些状态数据:

3.1.建一个数据库数据字典表(key,value,parentKey)来保存这些数据

优点:可以表示具有上下级关系的数据字典、在生产阶段可以随意修改数据的名称

缺点:需要从数据库获取,性能稍差

3.2.将这些数据以枚举的形式保存(我们可以使用枚举表示数据库表中的状态为字段对应的一组状态,比如对于person表中的sex字段的值我们就可以用枚举表示)

优点:赋值的时候可以以强类型的方式赋值而不是数字,比如:

int a = (int)EnumHelper.Sex.女;

缺点:生产阶段不能修改名称

enum、int、string三种类型之间的互转

int a = (int)Sex.女;
            string b = Sex.女.ToString();
            Sex s= (Sex)Enum.Parse(typeof(Sex), "");
            Sex t= (Sex)1;

 

枚举转换成字典集合的方法

1.这里我就直接列举代码如下:

 public static class EnumHelper
    {
        /// <summary>
        /// 根据枚举的值获取枚举名称
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="status">枚举的值</param>
        /// <returns></returns>
        public static string GetEnumName<T>(this int status)
        {
            return Enum.GetName(typeof(T), status);
        }
        /// <summary>
        /// 获取枚举名称集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static string[] GetNamesArr<T>()
        {
            return Enum.GetNames(typeof(T));
        }
        /// <summary>
        /// 将枚举转换成字典集合
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <returns></returns>
        public static Dictionary<string, int> getEnumDic<T>()
        {

            Dictionary<string, int> resultList = new Dictionary<string, int>();
            Type type = typeof(T);
            var strList = GetNamesArr<T>().ToList();
            foreach (string key in strList)
            {
                string val = Enum.Format(type, Enum.Parse(type, key), "d");
                resultList.Add(key, int.Parse(val));
            }
            return resultList;
        }
       
    }
 public enum Sex
    {
        男 = 0,
        女
    }

使用方法如下:

static void Main(string[] args)
        {
            var name = EnumHelper.GetEnumName<Sex>(1);
            Console.WriteLine(name);
            var dic = EnumHelper.getEnumDic<Sex>();
            int a = (int)Sex.女;
        }

 

以上是关于c#将枚举转换成字典集合的主要内容,如果未能解决你的问题,请参考以下文章

如何将枚举转换成字典实现动态的效果

在 C# 中枚举到字典

澄清 C# 字典上的读写

C#如何将枚举类(enum)型转换成字符(string)类型

C#如何把INT类型转换为方法参数对应的枚举类型?怎么强制转换?

c#中怎么将string转化为枚举