.net 获取枚举类型内容
C# net 遍历 枚举 特性 Attribute Description
C# net 遍历 枚举 enum 特性 Attribute Description
net 遍历 枚举 enum 特性 Attribute Description
首先,上一个我们的示例枚举类型
/// <summary> /// 告警类型 /// </summary> public enum AlarmType { /// <summary> /// 偏离告警 /// </summary> [Description("偏离告警")] Offset, /// <summary> /// 超速告警 /// </summary> [Description("超速告警")] OverSpeed, /// <summary> /// 电子围栏告警 /// </summary> [Description("电子围栏告警")] EFence, /// <summary> /// 离开区域告警 /// </summary> [Description("离开区域告警")] LeaveArea, /// <summary> /// SOS告警 /// </summary> [Description("SOS告警")] SOS, /// <summary> /// 脱离车队告警 /// </summary> [Description("脱离车队告警")] Deviation }
创建一个用来接收枚举信息的实体类
public class EnumInfo { /// <summary> /// 枚举值 /// </summary> public int Value { get; set; } /// <summary> /// 枚举名 /// </summary> public string Name { get; set; } /// <summary> /// 特性 /// </summary> public string Description { get; set; } }
遍历枚举:
拓展方法,需要定义在非泛型静态类中。
实际业务中用到时,可根据自己的具体情况,选择自定义一个类来定义这个拓展方法GetAllEnums(),如果条件允许当然也可以将GetAllEnums()定义在你的业务类中。
public static class GetEnumInfo { /// <summary> /// 获取所有枚举 /// </summary> /// <param name="type"></param> /// <returns></returns> public static List<EnumInfo> GetAllEnums(this Type type) { var result = new List<EnumInfo>(); if (type.IsEnum) { var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public) ?? new FieldInfo[] { }; foreach (var field in fields) { var info = new EnumInfo(); info.Name = field.Name; info.Value = (int)field.GetValue(null); var atts = field.GetCustomAttributes(typeof(DescriptionAttribute), false); info.Description = atts != null && atts.Length > 0 ? ((DescriptionAttribute[])atts)[0].Description : string.Empty; result.Add(info); } } return result; } }
最后,展示吧
/// <summary> /// 获取枚举类型全部信息 /// </summary> /// <returns></returns> public List<EnumInfo> GetAllEnumsTest() { var data = typeof(AlarmType).GetAllEnums(); return data; }
斩后知