在Asp.net core中,我们使用枚举,但有时候我们需要根据枚举的值转换成对应的中文描述,比如下面的定义:
public enum ArticleStatus { /// <summary> /// 正常 /// </summary> [Description("正常")] Normal = 0, /// <summary> /// 等待审核 /// </summary> [Description("等审核")] WattingForAudit = 1, /// <summary> /// 不显示 /// </summary> [Description("不显示")] NoDisplay = 2, /// <summary> /// 伪删 /// </summary> [Description("已删除")] Deleted = 3 }
现在我们需要拿到的是Description的内容,可以使用下面的枚举帮助类:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; namespace MyCode.Common { public class EnumHelper { private static Dictionary<int,Dictionary<int,string>> DicEnum = new Dictionary<int, Dictionary<int, string>>(); public static Dictionary<int, string> GetEnumDic<TEnum>() { var hashcode = typeof(TEnum).GetHashCode(); if (DicEnum.ContainsKey(hashcode)) { return DicEnum[hashcode]; } TEnum t = default(TEnum); var dic = new Dictionary<int, string>(); var typeInfo = t.GetType().GetTypeInfo(); var enumValues = typeInfo.GetEnumValues(); foreach (var value in enumValues) { MemberInfo memberInfo = typeInfo.GetMember(value.ToString())[0]; var descriptionAttribute = memberInfo.GetCustomAttribute<DescriptionAttribute>(); dic.Add(Convert.ToInt32(value), descriptionAttribute.Description); } DicEnum.Add(hashcode, dic); return dic; } } }