zoukankan      html  css  js  c++  java
  • C# enum 枚举 反射

    枚举遍历
    public enum EMyType  
    {  
        [System.ComponentModel.Description("A类型")]  
        TypeA = 1,  
        [System.ComponentModel.Description("B类型")]  
        TypeB = 1,  
        [System.ComponentModel.Description("C类型")]  
        TypeC = 2,  
    }    
    接着遍历其枚举名的方法是
    [csharp] view plain copy 
    foreach (var name in Enum.GetNames(typeof(EMyType)))  
    {  
        Console.WriteLine(name);  
    }  
    接着遍历其枚举名与枚举值的方法是
    [csharp] view plain copy 
    foreach (var value in Enum.GetValues(typeof(EMyType)))  
    {  
        Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));  
    }  
    接着遍历其枚举名,枚举值与描述属性的字符串的方法是
    [csharp] view plain copy 
    foreach (var value in Enum.GetValues(typeof(EMyType)))  
    {  
        object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);  
        if (objAttrs != null &&   
            objAttrs.Length > 0)  
        {  
            DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;  
            Console.WriteLine(string.Format("[{0}]", descAttr.Description));  
        }  
        Console.WriteLine(string.Format("{0}={1}", value.ToString(), Convert.ToInt32(value)));  
    }
    

    枚举反射,根据枚举中的val或者data读取值和描述

    举例实用:

     1             Type t = Assembly.Load("XXX.SDK").GetType("XXX.SDK.Entities." + ObjType);
     2             var dataList = new List<object>();
     3             foreach (var value in Enum.GetValues(t))
     4             {
     5 
     6                 object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
     7                 DescriptionAttribute descAttr = objAttrs[0] as DescriptionAttribute;
     8                 var date = new
     9                 {
    10                     Description = descAttr.Description,
    11                     Name = value.ToString(),
    12                     value = Convert.ToInt32(value)
    13                 };
    14                 dataList.Add(date);
    15             }

    根据枚举的名字,读出枚举的描述,内容和值。

             UserCardStatus userCardStatu = (UserCardStatus)Enum.Parse(typeof(UserCardStatus), result.user_card_status, true);
               string txt = GetEnumDescription(userCardStatu);
    
    
            public string GetEnumDescription(Enum enumValue)
            {
                string str = enumValue.ToString();
                FieldInfo field = enumValue.GetType().GetField(str);
                object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (objs == null || objs.Length == 0) return str;
                DescriptionAttribute da = (DescriptionAttribute)objs[0];
                return da.Description;
            }

    根据枚举的单个内容,读出描述

      

  • 相关阅读:
    Oracle数据库的经典问题 snapshot too old是什么原因引起的
    在服务器上排除问题的头五分钟
    MySQL的redo log结构和SQL Server的log结构对比
    MySQL优化---DBA对MySQL优化的一些总结
    事务分类
    扩展HT for Web之HTML5表格组件的Renderer和Editor
    iOS平台快速发布HT for Web拓扑图应用
    HT for Web的HTML5树组件延迟加载技术实现
    Zip 压缩、解压技术在 HTML5 浏览器中的应用
    百度地图、ECharts整合HT for Web网络拓扑图应用
  • 原文地址:https://www.cnblogs.com/Zatsugaku-code/p/5761089.html
Copyright © 2011-2022 走看看