Fork me on GitHub

.Net 枚举封装类

复制代码
#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
复制代码
posted @   WantRemake  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示