using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace CommonLibrary { /// <summary> /// 性别 /// </summary> public enum Sex { [Description("男")] Man = 1, [Description("女")] Woman = 2 } /// <summary> /// 操作日志类型 /// </summary> public enum OperationType { [Description("新建")] Create = 1, [Description("删除")] Delete = 2, [Description("更新")] Update = 3 } public enum YesNo { [Description("是")] Yes = 1, [Description("否")] No = 2 } /// <summary> /// /// </summary> public static class EnumHelper { /// <summary> /// 枚举转表格(无需获取说明时使用) /// </summary> /// <param name="type"></param> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public static DataTable EnumToDataTable(Type type, string key = "key", string value = "val") { string[] Names = System.Enum.GetNames(type); Array Values = System.Enum.GetValues(type); DataTable table = new DataTable(); table.Columns.Add(value, System.Type.GetType("System.String")); table.Columns.Add(key, System.Type.GetType("System.Int32")); table.Columns[key].Unique = true; for (int i = 0; i < Values.Length; i++) { DataRow DR = table.NewRow(); DR[value] = Names[i].ToString(); DR[key] = (int)Values.GetValue(i); table.Rows.Add(DR); } return table; } /// <summary> /// 枚举转表格(需要获取说明时使用) /// </summary> /// <param name="type"></param> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public static DataTable EnumToDataTable<T>(string key = "key", string value = "val") { Type type = typeof(T); string[] Names = System.Enum.GetNames(type); Array Values = System.Enum.GetValues(type); string desc = string.Empty; DataTable table = new DataTable(); table.Columns.Add(value, System.Type.GetType("System.String")); table.Columns.Add(key, System.Type.GetType("System.Int32")); table.Columns[key].Unique = true; for (int i = 0; i < Values.Length; i++) { T t = (T)System.Enum.Parse(typeof(T), Values.GetValue(i).ToString()); MemberInfo[] memInfo = type.GetMember(t.ToString()); if (memInfo != null && memInfo.Length > 0) { object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) { desc = ((DescriptionAttribute)attrs[0]).Description; } } DataRow DR = table.NewRow(); DR[value] = string.IsNullOrEmpty(desc) ? Names[i].ToString() : desc DR[key] = (int)Values.GetValue(i); table.Rows.Add(DR); } return table; } /// <summary> /// 枚举转字典(无需获取描述时使用) /// </summary> /// <param name="type"></param> /// <returns></returns> public static IDictionary<int, string> EnumToDictionary(Type type) { string[] Names = System.Enum.GetNames(type); Array Values = System.Enum.GetValues(type); IDictionary<int, string> dic = new Dictionary<int, string>(); for (int i = 0; i < Values.Length; i++) { dic.Add((int)Values.GetValue(i), Names[i].ToString()); } return dic; } /// <summary> /// 枚举转字典(需获取描述时使用) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="type"></param> /// <returns></returns> public static IDictionary<int, string> EnumToDictionary<T>() { Type type = typeof(T); string[] Names = System.Enum.GetNames(type); Array Values = System.Enum.GetValues(type); IDictionary<int, string> dic = new Dictionary<int, string>(); string desc = string.Empty; for (int i = 0; i < Values.Length; i++) { T t = (T)System.Enum.Parse(typeof(T), Values.GetValue(i).ToString()); MemberInfo[] memInfo = type.GetMember(t.ToString()); if (memInfo != null && memInfo.Length > 0) { object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) { desc = ((DescriptionAttribute)attrs[0]).Description; } } //GetEnumDesc(T); dic.Add((int)Values.GetValue(i), string.IsNullOrEmpty(desc) ? Names[i].ToString() : desc); } return dic; } } }