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


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


     

  • 相关阅读:
    抽象工厂模式
    两个页面之间的另一种传值
    回头看看数据集合
    (kinetis K60)kinetis初体验之GPIO寄存器
    (kinetis K60)UART寄存器 串口收发数据
    (Kinetis K60) LPTMR 延时
    (Kinetis K60)WDOG看门狗测试
    (Kinetis K60) AD采集
    (Kinetis K60) PIT定时中断
    (Kinetis K60) FTM输出PWM
  • 原文地址:https://www.cnblogs.com/qyfh/p/6125942.html
Copyright © 2020-2023  润新知