枚举遍历
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读取值和描述

举例实用:

             Type t = Assembly.Load("XXX.SDK").GetType("XXX.SDK.Entities." + ObjType);
var dataList = new List<object>();
foreach (var value in Enum.GetValues(t))
{ object[] objAttrs = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);
DescriptionAttribute descAttr = objAttrs[] as DescriptionAttribute;
var date = new
{
Description = descAttr.Description,
Name = value.ToString(),
value = Convert.ToInt32(value)
};
dataList.Add(date);
}

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

         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 == ) return str;
DescriptionAttribute da = (DescriptionAttribute)objs[];
return da.Description;
}

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

  

C# enum 枚举 反射的更多相关文章

  1. Enum枚举类|注解Annotation

    Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ...

  2. 获取Enum枚举值描述的几法方法

    原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用 ...

  3. Java单例模式的各种实现(饿汉、懒汉、静态内部类、static代码块、enum枚举类型)

    饿汉模式 饿汉模式就是立即加载,在方法调用前,实例就已经被创建了,所以是线程安全的. public class MyObject1 { private static MyObject1 myObjec ...

  4. Swift Enum 枚举

    前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...

  5. Enum 枚举类

    目录 Enum 枚举类 基础 定义与用途 基本方法 示例 进阶 实现原理 枚举与Class对象 自定义枚举类和构造方法及toString() Enum中使用抽象方法来实现枚举实例的多态性 Enum与接 ...

  6. c# (ENUM)枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

  7. C#将Enum枚举映射到文本字符串

    介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ...

  8. MVC3不能正确识别JSON中的Enum枚举值

    一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...

  9. 161208、Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...

随机推荐

  1. AppCan使用注意问题

    1.文件上传的时候尽量使用uexUploadMsg,然后注意文件名,文件名一定要正确才能传上去.

  2. 使用 sysbench对mysql进行压力测试介绍之一

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文只是简单演示一下几种测试的用 ...

  3. Java-Runoob:Java 简介

    ylbtech-Java-Runoob:Java 简介 1.返回顶部 1. Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java ...

  4. 获得网址的Https的SSL证书并且保存到truststore

    一.生成PEM文件 这里以邮件发送接口为例https://api.mailgun.net/v3/,首先运行以下命令: openssl s_client -host -prexit -showcerts ...

  5. phpmailer实现邮件发送

    phpmailer实现邮件发送 1.代码 <?php require("class.phpmailer.php"); //这个是一个smtp的php文档,网上可以下载得到 $ ...

  6. 解决在“Resources”参数中指定了项“obj\Debug\KaiShiHID.Form1.resources”多次。“Resources”参数不支持重复项

    错误截图: 发生原因描述: 窗体Form1, 有一个分部类; 叫做FormPartial.cs; 双击了FormPartial这个窗体, 然后生成了一个Load事件, 即时就报了编译错误, 然后就删除 ...

  7. Cassandra学习五 使用Key的正确姿势

    NoSQL一般是反范式的,比如提倡数据冗余,使得不至于写出非常复杂的SQL语句. Cassandra之中一共包含下面5中Key: Primary Key: 用来获取某一行的数据,可以是一列或多列   ...

  8. Python基础学习三 字符串

    字符串方法 slit = ['a', 'b', 'c', 'd', 'f', 'g'] s2='hhhhhhhhhh' tu = (1,2,3,4,5) d={'name':'nnn','age':1 ...

  9. (java基础)抽象类加泛型的理解

    今天在群里问了个基础问题,挨喷了..这更加激起了我对知识的渴望.也在此铭记一下,将来有经验了要对刚入门的童鞋们严格点,简单的东西要自己看...唉,程序员何苦为难程序猿呢.. 接下来简单总结下这个万能的 ...

  10. memcache 随笔

    第一次用可能有很多不足的地方  以后慢慢改进. memcache  是一个简单的键/值对    是通过键和值储存信息到memcache中 ,通过特定的键请求来返回信息. 信息会无限期的保留在内存中 : ...