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