.Net反射-两种方式获取Enum中的值
public enum EJobType
{
客服 = , 业务员 = , 财务 = , 经理 =
}
Type jobType = typeof(EJobType);
方式1:
Array enumItems = Enum.GetValues(jobType);
foreach (var enumItem in enumItems)
{
int value = (int)enumItem;
string text = enumItem.ToString();
}
方式2:
FieldInfo[] fields = jobType.GetFields(BindingFlags.Static | BindingFlags.Public);//
foreach (var field in fields)
{
string text = field.Name;
object value = field.GetRawConstantValue();
}
再分享一个Enum的扩展:
public static class EnumExtensions
{
/// <summary>
/// 枚举信息
/// </summary>
public class EnumInfo<T>
{
/// <summary>
/// 枚举名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 显示的名称
/// </summary>
public string DisplayName { get; set; }
/// <summary>
/// 值
/// </summary>
public T Value { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
} /// <summary>
/// 获取枚举值的名称
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string GetName(this Enum value)
{
return Enum.GetName(value.GetType(), value);
}
/// <summary>
/// 获取该枚举的显示值(如果使用了DisplayAttribute 标签则显示描述中的别名,否则使用 Enum 的名称。)
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string GetText(this Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
if (fi == null)
{
return string.Empty;
} DisplayAttribute[] attributes = (DisplayAttribute[])fi.GetCustomAttributes(typeof(DisplayAttribute), false);
if ((attributes != null) && (attributes.Length > ))
return attributes[].Name;
else
return value.ToString();
} /// <summary>
/// 获取枚举代表的值
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static int GetValue(this Enum value)
{
return Convert.ToInt32(value);
}
public static T Parse<T>(this Enum enumThis, int value)
{
return (T)Enum.Parse(enumThis.GetType(), value.ToString());
}
public static T Parse<T>(this Enum enumThis, string value)
{
return (T)Enum.Parse(enumThis.GetType(), value);
}
/// <summary>
/// 根据Name获取Value
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static int GetEnumValue(Type enumType, string enumName)
{
return (int)Enum.Parse(enumType, enumName);
}
/// <summary>
/// 获取枚举信息(名称,值,描述)
/// </summary>
/// <returns></returns>
public static List<EnumInfo<T>> GetEnumInfo<T>(this Type enumType)
{
if (!enumType.IsEnum) throw new InvalidOperationException("type not a enum!");
List<EnumInfo<T>> emInfos = new List<EnumInfo<T>>();
var fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (var fi in fields)
{
EnumInfo<T> emInfo = new EnumInfo<T>();
emInfo.Name = fi.Name;
emInfo.Value = (T)fi.GetRawConstantValue();
var displayAttr = fi.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault();
if (displayAttr != null)
{
emInfo.DisplayName = ((DisplayAttribute)displayAttr).Name;
emInfo.Description = ((DisplayAttribute)displayAttr).Description;
}
var desAttr = fi.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault();
if (desAttr != null)
{
emInfo.Description = ((DescriptionAttribute)desAttr).Description;
}
if (string.IsNullOrWhiteSpace(emInfo.Description))
{
emInfo.Description = fi.Name;
}
if (string.IsNullOrWhiteSpace(emInfo.DisplayName))
{
emInfo.DisplayName = fi.Name;
}
emInfos.Add(emInfo);
}
return emInfos;
}
public static List<EnumInfo<object>> GetEnumInfo(this Type enumType)
{
return GetEnumInfo<object>(enumType);
}
}
.Net反射-两种方式获取Enum中的值的更多相关文章
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- 总结javascript继承的两种方式的N中写法
最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...
- android两种方式获取AsyncTask返回值
获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...
- android手机两种方式获取IP地址
1.使用WIFI 首先设置用户权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"& ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- spark-streaming-连接kafka的两种方式
推荐系统的在线部分往往使用spark-streaming实现,这是一个很重要的环节. 在线流程的实时数据一般是从kafka获取消息到spark streaming spark连接kafka两种方式在面 ...
- MarkDown技巧:两种方式实现页内跳转
MarkDown技巧:两种方式实现页内跳转 本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnT ...
- 浅析使用vue-router实现前端路由的两种方式
关于vue-router 由于最近的项目中一直在使用vue,所以前端路由方案也是使用的官方路由vue-router,之前在angularJS项目中也是用过UI-router,感觉大同小异,不过很显然v ...
- Java反射获取class对象的三种方式,反射创建对象的两种方式
Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...
随机推荐
- bolb与base64的图片互转
直接看图简单明了. 注:便于测试你可以自己用base64图片测试互转一下.这里base64图片太长了就不给予展示了,望理解
- 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)
莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...
- nuxtjs踩坑指南
1.nuxt引入问题:Can't resolve 'stylus-loader' 原因在于没有安装stylus,安装即可:npm install stylus stylus-loader --save ...
- MSM8909中LK阶段LCM屏适配与显示流程分析(二)
1.前言 在前面的文章MSM8909中LK阶段LCM屏适配与显示流程分析(一),链接如下: https://www.cnblogs.com/Cqlismy/p/12019317.html 介绍了如何使 ...
- JavaScript DOM 常用操作
1.理解DOM: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两个角度理解: 对于JavaScript ...
- iOS 一个项目添加多个TARGET
项目开发中会存在测试.正式等不同环境,需对应不同接口Host地址.项目名称等等配置.如果每次只有一个项目target的话每次打包的时候替换会很麻烦,而且容易出错.所以我们可以通过创建多个不同配置的ta ...
- Netty中的ChannelPipeline源码分析
ChannelPipeline在Netty中是用来处理请求的责任链,默认实现是DefaultChannelPipeline,其构造方法如下: private final Channel channel ...
- python 提取整个 HTML 节点
有的时候,需要把整个 HTML 节点原封不动地取下来,也就是包括节点标签.节点内容,甚至也包括内容中的空格.各种特殊符号等等. 假设已获取到页面源码,并将其保存在变量 src 中.则可有代码如下: f ...
- B-Tree详解
之前写过一篇关于索引的文章<SQL夯实基础(五):索引的数据结构>,这次我们主要详细讨论下B-Tree. B-树 B-tree,即B树,而不要读成B减树,它是一种多路搜索树(并不是二叉的) ...
- Python requests库的使用(二)
1.请求异常处理 请求异常类型: 请求超时处理(timeout): 实现代码: import requestsfrom requests import exceptions #引入exc ...