C#中Enum⽤法⼩结
enums枚举是值类型,数据直接存储在栈中,⽽不是使⽤引⽤和真实数据的隔离⽅式来存储。
(1)默认情况下,枚举中的第⼀个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,),因此以下两个代码定义是等价的: enum TrafficLight
{
Green,
Yellow,
Red
}
enum TrafficLight
{
Green = 0,
Yellow = 1,
Red = 2
}
(2)enum枚举类型的变量的名字不能相同,但是值可以相同,例如:
enum TrafficLight
{
Green = 0,
Yellow = 1,    // Duplicate value, OK
Red = 1        // Duplicate value, OK
}
(3)如果enum中的部分成员显式定义了值,⽽部分没有;那么没有定义值的成员还是会按照上⼀个成员的值来递增赋值,例如:
enum LoopType
{
None,          // value is 0
Daily,        // value is 1
Weekly = 7,
typeof的用法Monthly,      // value is 8
Yeayly,        // value is 9
DayGap = 15,
WeekGap,      // value is 16
MonthGap,      // value is 17
YearGap        // value is 18
}
(4)enum枚举成员可以⽤来作为位标志,同时⽀持位的操作(位与,位或等等),例如:
enum CardDeckSettings : uint
{
SingleDeck = 0x01,      // Bit 0
LargePictures = 0x02,  // Bit 1
FancyNumbers = 0x04,    // Bit 2
Animation = 0x08        // Bit 3
}
⼗六进制数的⼀个作⽤就是⽤来进⾏位运算和操作,很⽅便。
1. 枚举(enum type)通常⽤来表⽰⼀组常量。由于枚举是强类型的,这在编程中给我们提供了极⼤的⽅便。
2. 枚举的定义:
public enum Sex
{
男 = 0,
⼥ = 1
}
或者:如果只给男赋值,那么⼥=1
public enum Sex
{
男 = 0,
}
枚举在软件开发中的使⽤场景
在数据库设计⼈员表(person)时有性别字段Sex(0代表男,1代表⼥),我们⼀般⽤bit或者int类型表⽰。
1.在编程时我们给Sex字段赋值的⽅式为:
1).  Sex=0;
2).  Sex=(int)SexEnum.Man;
其中SexEnum为定义性别的枚举类型,我们可以看出第⼆种⽅式的可读性更强。
2.在编程时我们,如果Sex字段作为⼀个搜索条件的话,我们可能需要以下拉选择的⽅式展现所有可以选择的情况。那么我们就需要将SexEnum转换成⼀个字典集合然后绑定到对应的select标签,具体怎么实现请看下⾯的⽰例代码。
………………………………
enum、int、string三种类型之间的互转
执⾏结果如下:
获取描述信息
修改枚举如下:
获取描述信息代码如下:
打印结果如下:
枚举转换成字典集合的通⽤⽅法
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;
}
/// <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;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。