
#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

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)