枚举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);//输出 女
int cc = (int)Enum.Parse(typeof(Sex), "女");//将字符串转换成对应枚举的数值
Console.WriteLine(cc);//输出 1
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
}
]