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读取值和描述
举例实用:
             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 枚举 反射的更多相关文章
- Enum枚举类|注解Annotation
		Enum枚举类 ①枚举类和普通类的差别: 使用 enum 定义的枚举类默认继承了 java.lang.Enum 类 枚举类的构造器仅仅能使用 private 訪问控制符 枚举类的全部实例必须在枚举类中 ... 
- 获取Enum枚举值描述的几法方法
		原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用 ... 
- Java单例模式的各种实现(饿汉、懒汉、静态内部类、static代码块、enum枚举类型)
		饿汉模式 饿汉模式就是立即加载,在方法调用前,实例就已经被创建了,所以是线程安全的. public class MyObject1 { private static MyObject1 myObjec ... 
- Swift Enum 枚举
		前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ... 
- Enum 枚举类
		目录 Enum 枚举类 基础 定义与用途 基本方法 示例 进阶 实现原理 枚举与Class对象 自定义枚举类和构造方法及toString() Enum中使用抽象方法来实现枚举实例的多态性 Enum与接 ... 
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
		c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ... 
- C#将Enum枚举映射到文本字符串
		介绍 当将以前的C代码移植到C#中时,我快发疯了,因为有很多的数组需要将常量映射到字符串.当我在寻找一个C#的方法来完成的时候,我发现了一个自定义属性和映射的方法. 如何使用代码? 对每一个enum枚 ... 
- MVC3不能正确识别JSON中的Enum枚举值
		一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ... 
- 161208、Java enum 枚举还可以这么用
		在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ... 
随机推荐
- VisualGDB:使用VS创建CMake Linux项目
			转载地址:点击打开链接 根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用 ... 
- mysql索引之八:myisam压缩(前缀压缩)索引
			myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其 ... 
- web.config 权限设置
			<system.web> <authorization> <!--未登陆用户不可以访问--> <deny users="?" /> ... 
- 1097 Deduplication on a Linked List
			题意: 给出一个链表,删除绝对值相同的结点,对于每个绝对值为K的结点,只保留第一次出现的那个.把被移除的结点组成一个新链表,输出删除去重后的链表和新链表. 思路:考察链表的“删除”操作,不难. 代码: ... 
- 微信小程序之工具js封装与使用
			工具库的创建与使用 创建一个common文件夹 在common文件夹中创建一个utils文件夹 在utils文件夹中创建util.js // 工具 function tool() { console. ... 
- python开发模块基础:collections模块¶miko模块
			一,collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdic ... 
- 第13章 Spring框架的设计理念与设计模式分析
			13.1 Spring的骨骼架构 最核心的组件是:Core, Context, Bean. 13.1.1 Spring的设计理念 Spring最核心的组件是Bean组件.Spring解决的最关键的问题 ... 
- 0004-程序流程2之ui-router大意
			按照传统的操作方式,一般是点击某个按钮或者某个菜单项,我们将页面通过指定URL的方式跳转, 在HTML中,使用的是传统的a标签的href属性作跳转,在使用ui-router的情况下,我们对一个按钮 添 ... 
- Java微信公众平台开发【番外篇】(七)--公众平台测试帐号的申请
			转自:http://www.cuiyongzhi.com/post/45.html 前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[ ... 
- Hibernate中的一些注解的学习
			1.@Column注解 就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系. @Column注解一共有10个属性,这10个属性均为可 ... 
