zoukankan      html  css  js  c++  java
  • c# enum 解析

    解析定义的枚举

     public enum OrderPaymentStatus
        {
            /// <summary>
            /// 未支付
            /// </summary>
            [Description("未支付")]
            No=1,
            /// <summary>
            /// 已支付
            /// </summary>
            [Description("已支付")]
            Yes
        }
    

    解析类

    public static class EnumHelper
        {
            private static Hashtable enumDesciption = EnumHelper.GetDescriptionContainer();
    
            public static string ToDescription(this Enum value)
            {
                if (value == null)
                {
                    return "";
                }
                Type type = value.GetType();
                string name = Enum.GetName(type, value);
                return EnumHelper.GetDescription(type, name);
            }
    
            public static Dictionary<int, string> ToDescriptionDictionary<TEnum>()
            {
                Type typeFromHandle = typeof(TEnum);
                Array values = Enum.GetValues(typeFromHandle);
                Dictionary<int, string> dictionary = new Dictionary<int, string>();
                foreach (Enum item in values)
                {
                    dictionary.Add(Convert.ToInt32(item), item.ToDescription());
                }
                return dictionary;
            }
    
            public static Dictionary<int, string> ToDictionary<TEnum>()
            {
                Type typeFromHandle = typeof(TEnum);
                Array values = Enum.GetValues(typeFromHandle);
                Dictionary<int, string> dictionary = new Dictionary<int, string>();
                foreach (Enum item in values)
                {
                    dictionary.Add(Convert.ToInt32(item), item.ToString());
                }
                return dictionary;
            }
    
            private static bool IsIntType(double d)
            {
                return (double)(int)d != d;
            }
    
            private static Hashtable GetDescriptionContainer()
            {
                EnumHelper.enumDesciption = new Hashtable();
                return EnumHelper.enumDesciption;
            }
    
            private static void AddToEnumDescription(Type enumType)
            {
                EnumHelper.enumDesciption.Add(enumType, EnumHelper.GetEnumDic(enumType));
            }
    
            private static Dictionary<string, string> GetEnumDic(Type enumType)
            {
                Dictionary<string, string> dictionary = new Dictionary<string, string>();
                FieldInfo[] fields = enumType.GetFields();
                FieldInfo[] array = fields;
                foreach (FieldInfo fieldInfo in array)
                {
                    if (fieldInfo.FieldType.IsEnum)
                    {
                        object[] customAttributes = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
                        dictionary.Add(fieldInfo.Name, ((DescriptionAttribute)customAttributes[0]).Description);
                    }
                }
                return dictionary;
            }
    
            private static string GetDescription(Type enumType, string enumText)
            {
                if (string.IsNullOrEmpty(enumText))
                {
                    return null;
                }
                if (!EnumHelper.enumDesciption.ContainsKey(enumType))
                {
                    EnumHelper.AddToEnumDescription(enumType);
                }
                object obj = EnumHelper.enumDesciption[enumType];
                if (obj != null && !string.IsNullOrEmpty(enumText))
                {
                    Dictionary<string, string> dictionary = (Dictionary<string, string>)obj;
                    return dictionary[enumText].Split('|')[0];
                }
                throw new ApplicationException("不存在枚举的描述");
            }
        }
    

      

  • 相关阅读:
    ios awakeFromNib 和 initWithCoder:
    iOS 关于iphone6 和 iphone6 plus 的适配
    iOS 目录的使用
    iOS 8 WKWebView 知识点
    iOS 动画结束后 view的位置 待完善
    iOS coredata 数据库升级 时报Can't find model for source store
    iOS 真机文件系统区分大小写,而模拟器可能不区分
    iOS coredata 级联删除
    iOS 关于AFNetworking ssl 待完成
    iOS 关于UIWindow的理解
  • 原文地址:https://www.cnblogs.com/lkd3063601/p/10042277.html
Copyright © 2011-2022 走看看