文章来源:http://blog.csdn.net/yenange/article/details/7788332
最近改进了一下…… (2014-04-11)
1. 辅助类
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; namespace Util { /// <summary> /// Author: yenange /// Date: 2014-04-11 /// Description: 枚举辅助类 /// </summary> public static class EnumHelper { /// <summary> /// 扩展方法:根据枚举值得到相应的枚举定义字符串 /// </summary> /// <param name="value"></param> /// <param name="enumType"></param> /// <returns></returns> public static String ToEnumString(this int value, Type enumType) { NameValueCollection nvc = GetEnumStringFromEnumValue(enumType); return nvc[value.ToString()]; } /// <summary> /// 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合 /// </summary> /// <param name="enumType"></param> /// <returns></returns> public static NameValueCollection GetEnumStringFromEnumValue(Type enumType) { NameValueCollection nvc = new NameValueCollection(); Type typeDescription = typeof(DescriptionAttribute); System.Reflection.FieldInfo[] fields = enumType.GetFields(); string strText = string.Empty; string strValue = string.Empty; foreach (FieldInfo field in fields) { if (field.FieldType.IsEnum) { strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString(); nvc.Add(strValue, field.Name); } } return nvc; } /// <summary> /// 扩展方法:根据枚举值得到属性Description中的描述, 如果没有定义此属性则返回空串 /// </summary> /// <param name="value"></param> /// <param name="enumType"></param> /// <returns></returns> public static String ToEnumDescriptionString(this int value, Type enumType) { NameValueCollection nvc = GetNVCFromEnumValue(enumType); return nvc[value.ToString()]; } /// <summary> /// 根据枚举类型得到其所有的 值 与 枚举定义Description属性 的集合 /// </summary> /// <param name="enumType"></param> /// <returns></returns> public static NameValueCollection GetNVCFromEnumValue(Type enumType) { NameValueCollection nvc = new NameValueCollection(); Type typeDescription = typeof(DescriptionAttribute); System.Reflection.FieldInfo[] fields = enumType.GetFields(); string strText = string.Empty; string strValue = string.Empty; foreach (FieldInfo field in fields) { if (field.FieldType.IsEnum) { strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString(); object[] arr = field.GetCustomAttributes(typeDescription, true); if (arr.Length > 0) { DescriptionAttribute aa = (DescriptionAttribute)arr[0]; strText = aa.Description; } else { strText = ""; } nvc.Add(strValue, strText); } } return nvc; } }//end of class }//end of namespace
2. 测试类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections.Specialized; using System.ComponentModel; using System.Reflection; using Util; //注意引用 namespace ConsoleApp_Enum { public static class Program { public enum TimeOfDay { [Description("早晨")] Moning = 1, [Description("下午")] Afternoon = 2, [Description("晚上")] Evening = 3, } static void Main(string[] args) { int v = 3; string desc = v.ToEnumDescriptionString(typeof(TimeOfDay)); string str = v.ToEnumString(typeof(TimeOfDay)); Console.WriteLine("值: {0}, 枚举字符串:{1}, 描述:{2}", v, str, desc); Console.Read(); } } }
3. 结果