文章來源: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. 結果