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

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


 

转载于:https://www.cnblogs.com/lijuanfei/p/6125942.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值