C#中枚举的使用
1.原则上全部使用枚举,不使用常量,除非常量是一个,不是一组
2.如果一组常量中增减常量后要对代码修改,则要将这组常量定义为枚举
3.如果一组常量中增减常量后代码不需要修改,则要将这组常量存储到字码主档中,由数据库进行维护
枚举扩展方法
1.将字符串转为枚举
/// <summary> /// 通枚举项的名字转换为枚举 /// </summary> /// <typeparam name="TEnum">要转换的枚举类型</typeparam> /// <param name="enumName">枚举项的名字</param> /// <returns></returns> public static TEnum ToEnum<TEnum>(this string enumName) where TEnum : struct, IComparable, IFormattable, IConvertible { return (TEnum)Enum.Parse(typeof(TEnum), enumName); }
2.获取枚举的描述,在枚举项定义时加上Description 特性
/// <summary> /// 获取一个枚举值的描述 /// </summary> /// <param name="obj">枚举值</param> /// <returns></returns> public static string GetDescription(this Enum obj) { FieldInfo fi = obj.GetType().GetField(obj.ToString()); DescriptionAttribute[] arrDesc = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); return arrDesc[0].Description; }
3.获取枚举的数据清单,方便绑定到下拉列表等控件
/// <summary> /// 获取枚举的(描述,名称,值)数据列表,通常用于绑定到控件 /// </summary> /// <typeparam name="TEnum">枚举类型</typeparam> /// <returns></returns> public static List<Tuple<string, string, int>> GetEnumDataList<TEnum>() where TEnum : struct , IComparable, IFormattable, IConvertible { List<Tuple<string, string, int>> dataList = new List<Tuple<string, string, int>>(); Type t = typeof(TEnum); if (!t.IsEnum) { return null; } Array arrays = Enum.GetValues(t); for (int i = 0; i < arrays.LongLength; i++) { Enum tmp = (Enum)arrays.GetValue(i); string description = GetDescription(tmp); string name = tmp.ToString(); int value = Convert.ToInt32( tmp); dataList.Add(new Tuple<string, string, int>(description, name, value)); } return dataList; }