zoukankan      html  css  js  c++  java
  • 枚举enum

    一。枚举(enum type)通常用来表示一组常量。枚举是值数据类型,是强类型,使用 enum 关键字声明

    枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.

    定义:

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

    也可以简写,可以不写值或者只写的一个

     public enum Sex
            {
                男 = 0,
                女 
            }

    女默认是1

    二。数据库设计使用场景

    在数据库设计人员表(person)时有性别字段Sex(0代表男,1代表女),我们一般用bit或者int类型表示。

    1.在编程时我们给Sex字段赋值的方式为:

    1).  Sex=0;

    2).  Sex=(int)SexEnum.Man;

    其中SexEnum为定义性别的枚举类型,我们可以看出第二种方式的可读性更强。

    2.在编程时我们,如果Sex字段作为一个搜索条件的话,我们可能需要以下拉选择的方式展现所有可以选择的情况。那么我们就需要将SexEnum转换成一个字典集合然后绑定到对应的select标签,具体怎么实现请看下面的示例代码。

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

     

    public enum Sex
            {
                男 = 0, 女
            }
    static void Main(string[] args)
            {
                var x = Sex.女;//这里x的类型是Sex
                Console.WriteLine(x);//输出 女
    
                int a = (int)Sex.女;//将枚举转换成整数
                Console.WriteLine(a);//输出 1
    
                string b = Sex.女.ToString();//将枚举转换成字符串
                Console.WriteLine(b);//输出 女
    
                Sex c = (Sex)Enum.Parse(typeof(Sex), "");//将字符串转换成枚举
                Console.WriteLine(c);//输出 女
    
                Sex d = (Sex)1;//将整数转换成枚举
                Console.WriteLine(d);//输出 女
    
                string s = Enum.GetName(typeof(Sex), 1);//将整数转换成字符串
                Console.WriteLine(s);//输出 女
                //循环枚举
                foreach(Sex sex in Enum.GetValues(typeof(Sex)))
                {
                    Console.WriteLine(sex.ToString() + "---" + (int)sex);
                    //输出 男---0  女---1
                }
    
            }
    View Code

     

    四。枚举转换成字典集合的通用方法

    public enum Sex
        {
            man,
            woman
        }
        public enum Color
        {
            red,
            blue
        }
    View Code
    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;
            }
            /// <summary>
            /// 将枚举转换成字典
            /// </summary>
            /// <typeparam name="TEnum"></typeparam>
            /// <returns></returns>
            public static Dictionary<string, int> GetDic<TEnum>()
            {
                Dictionary<string, int> dic = new Dictionary<string, int>();
                Type t = typeof(TEnum);
                var arr = Enum.GetValues(t);
                foreach (var item in arr)
                {
                    dic.Add(item.ToString(), (int)item);
                }
    
                return dic;
            }
    
        }
    View Code
    static void Main(string[] args)
            {
                var name = EnumHelper.GetEnumName<Sex>(1);
                Console.WriteLine("数字转字符串:"+name);
                var dic1 = EnumHelper.getEnumDic<Sex>();
                Console.WriteLine("枚举转字典集合方法1:");
                foreach (var item in dic1)
                {
                    Console.WriteLine(item.Key + "==" + item.Value);
                }
                Console.WriteLine("枚举转字典集合方法2:");
                var dic= EnumHelper.GetDic<Color>();
                foreach (var item in dic)
                {
                    Console.WriteLine(item.Key+"=="+item.Value);
                }
                Console.ReadLine();
            }
    View Code

    执行结果:

    五。枚举转换成集合的通用方法

      public enum FeedbackResult
        {
            满意=1,很满意,非常满意
        }
    
      var data = (typeof(FeedbackResult)).ToJArray();

    输出结果:

    "data": [
            {
                "Name": "满意",
                "Value": 1
            },
            {
                "Name": "很满意",
                "Value": 2
            },
            {
                "Name": "非常满意",
                "Value": 3
            }
        ]
    View Code
  • 相关阅读:
    Oracle 行列转换
    Oracle中特殊的INSERT语句
    在.net中实现压缩多个文件为.zip文件 【转】
    JavaScript 原型链【转】
    Oracle安装中的DHCP问题
    每日一题力扣49
    每日一题力扣423
    每日一题力扣451
    每日一题力扣237
    每日一题力扣383
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/13879193.html
Copyright © 2011-2022 走看看