#region 封装类 /// <summary> /// EnumHelper 的摘要说明 /// </summary> public static class EnumHelper { /// <summary> /// 获取枚举的Value值 /// </summary> /// <param name="status"></param> /// <returns></returns> public static int GetValue(this Enum status) { Type type = status.GetType(); FieldInfo field = type.GetField(status.ToString()); return (int)field.GetValue(field.Name); } /// <summary> /// 获取枚举 上面 DescribeAttribute特性 的 描述 /// </summary> public static string GetEnumDescribeRemark(this Enum status) { Type type = status.GetType(); FieldInfo fileIdInfo = type.GetField(status.ToString()); if (!fileIdInfo.IsDefined(typeof(DescribeAttribute), true)) return ""; DescribeAttribute attr = fileIdInfo.GetCustomAttributes(typeof(DescribeAttribute), false).FirstOrDefault() as DescribeAttribute; return attr.Remark; } /// <summary> /// 根据Value值获取DescribeAttribute描述,如果没有标记DescribeAttribute 那么取name值 /// </summary> /// <returns></returns> public static string GetRemark<TEnum>(object value) { if (value == null || string.IsNullOrWhiteSpace(value.ToString())) return ""; Type type = typeof(TEnum); string name = Enum.GetName(type, ConvertHelper.ToInt32(value)); if (name.IsNullOrWhiteSpace()) return ""; FieldInfo fileIdInfo = type.GetField(name); if (!fileIdInfo.IsDefined(typeof(DescribeAttribute), false)) return name; DescribeAttribute attr = fileIdInfo.GetCustomAttributes(typeof(DescribeAttribute), false).FirstOrDefault() as DescribeAttribute; return attr.Remark; } /// <summary> /// 根据Value值获取DescribeAttribute描述 /// </summary> /// <returns></returns> public static string GetRemarkByValue<TEnum>(int value) { Type type = typeof(TEnum); foreach (var item in Enum.GetValues(type)) { if ((int)item == value) return EnumHelper.GetEnumDescribeRemark(item as Enum); } return ""; } /// <summary> /// 根据Value值获取DescribeAttribute描述 /// </summary> /// <returns></returns> public static string GetNameByValue<TEnum>(int value) { Type type = typeof(TEnum); foreach (var item in Enum.GetValues(type)) { if ((int)item == value) return item.ToString(); } return ""; } /// <summary> /// 根据Name值获取DescribeAttribute描述 /// </summary> /// <returns></returns> public static string GetRemarkByName<TEnum>(object name) { if (name == null || string.IsNullOrWhiteSpace(name.ToString())) return ""; Type type = typeof(TEnum); FieldInfo fileIdInfo = type.GetField(name.ToString()); if (!fileIdInfo.IsDefined(typeof(DescribeAttribute), false)) return ""; DescribeAttribute attr = fileIdInfo.GetCustomAttributes(typeof(DescribeAttribute), false).FirstOrDefault() as DescribeAttribute; return attr.Remark; } /// <summary> /// 根据Name值获取Value值,失败返回-1 /// </summary> /// <returns></returns> public static int GetValueByName<TEnum>(object name) { if (name == null || string.IsNullOrWhiteSpace(name.ToString())) return -1; Type type = typeof(TEnum); FieldInfo fileIdInfo = type.GetField(name.ToString()); if (!fileIdInfo.IsDefined(typeof(DescribeAttribute), false)) return -1; return (int)fileIdInfo.GetValue(type); } /// <summary> /// 获取枚举的列表 /// </summary> /// <typeparam name="TEnum"></typeparam> /// <param name="exp">条件</param> /// <returns></returns> public static List<SelectDto> GetList<TEnum>(Func<SelectDto, bool> exp = null) { if (exp == null) exp = f => true; Type type = typeof(TEnum); return (from object item in Enum.GetValues(type) select new SelectDto() { Id = (int)item, Value = EnumHelper.GetEnumDescribeRemark(item as Enum), Childs = new List<SelectDto>() }).Where(exp).ToList(); } } #endregion #region 枚举示例 /// <summary> /// 车辆类型 /// </summary> public enum HKCarTypeEnum { [Describe("其它车")] Other = 0, [Describe("小型车")] Small = 1, [Describe("大型车")] Big = 2, [Describe("摩托车")] Motorbike = 3 } #endregion #region 描述类别 /// <summary> /// 描述一些信息 /// </summary> public class DescribeAttribute:Attribute { /// <summary> /// 描述 /// </summary> public string Remark { get; private set; } /// <summary> /// 初始化 /// </summary> /// <param name="remark">描述</param> public DescribeAttribute(string remark) { this.Remark = remark; } } #endregion
.Net 枚举封装类
发布时间 2023-05-29 15:23:51作者: WantRemake