1. 首页>
  2. 技术文章>
  3. asp.net core获取枚举的Description

asp.net core获取枚举的Description

6/8/17 10:04:32 PM 浏览 1717 评论 0

donetcore

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

		
	}
}


网友讨论