一。枚举(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 } }
四。枚举转换成字典集合的通用方法
public enum Sex { man, woman } public enum Color { red, blue }
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; } }
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(); }
执行结果:
五。枚举转换成集合的通用方法
public enum FeedbackResult { 满意=1,很满意,非常满意 } var data = (typeof(FeedbackResult)).ToJArray();
输出结果:
"data": [ { "Name": "满意", "Value": 1 }, { "Name": "很满意", "Value": 2 }, { "Name": "非常满意", "Value": 3 } ]