zoukankan      html  css  js  c++  java
  • 根据枚举值取得描述和枚举定义字符串 [转]

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


     

  • 相关阅读:
    Packet for query is too large (1986748 > 1048576). You can change this value on the server by 异常
    解决springdatajpa插入大量数据速度慢的问题
    thymeleaf onclick方法向js方法传递参数
    git的使用(扫盲)
    【错误总结】Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.
    SpringBoot集成Swagger(Swagger的使用),生成接口文档,方便前后端分离开发
    spring中后台接收参数总结
    PTA 03-树3 Tree Traversals Again (25分)
    PTA 03-树2 List Leaves (25分)
    PTA 03-树1 树的同构 (25分)
  • 原文地址:https://www.cnblogs.com/qyfh/p/6125942.html
Copyright © 2011-2022 走看看