根据枚举值取得描述和枚举定义字符串 [转]

文章来源: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. 结果


 

posted @ 2016-12-02 15:28  柒月风华  阅读(2818)  评论(0编辑  收藏  举报