.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;
}

 

 

 

 

posted @ 2022-09-28 10:08  深海地平线  阅读(338)  评论(0编辑  收藏  举报