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中的值的更多相关文章

  1. Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)

    反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...

  2. 总结javascript继承的两种方式的N中写法

    最近翻看博客园,总结了一下javascript的继承方式:prototype和copy继承方式. 一.prototype方式 当一个函数被创建时,Function构造函数产生的函数会隐式的被赋予一个p ...

  3. android两种方式获取AsyncTask返回值

    获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...

  4. android手机两种方式获取IP地址

    1.使用WIFI 首先设置用户权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"& ...

  5. Java中HashMap遍历的两种方式

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

  6. spark-streaming-连接kafka的两种方式

    推荐系统的在线部分往往使用spark-streaming实现,这是一个很重要的环节. 在线流程的实时数据一般是从kafka获取消息到spark streaming spark连接kafka两种方式在面 ...

  7. MarkDown技巧:两种方式实现页内跳转

    MarkDown技巧:两种方式实现页内跳转 本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnT ...

  8. 浅析使用vue-router实现前端路由的两种方式

    关于vue-router 由于最近的项目中一直在使用vue,所以前端路由方案也是使用的官方路由vue-router,之前在angularJS项目中也是用过UI-router,感觉大同小异,不过很显然v ...

  9. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

随机推荐

  1. [Codeforces1250E] The Coronation

    [Codeforces1250E] The Coronation The Coronation 又是一道并查集...最近做的并查集咋这么多... 思路 首先,维护元素间关系的题想到并查集. 因为这里涉 ...

  2. 【Linux命令】ulimit设置最大文件打开数

    一.简介 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默 ...

  3. 奥展项目笔记04--Spring cloud 通过父工程打包多个子工程,导出可运行的Jar包

    在spring cloud微服务搭建过程中,我们创建了多个微服务模块,如图: 1.父工程Pom文件 <?xml version="1.0" encoding="UT ...

  4. 成都,我们来啦 | Dubbo 社区开发者日

    [关注 阿里巴巴云原生 公众号,回复关键词"报名",即可参与抽奖!] 活动时间:10 月 26 日 13:00 - 18:00 活动地点:成都市高新区交子大道中海国际中心 233 ...

  5. Kubernetes SatefulSet(有状态应用部署)

    Kubernetes SatefulSet(有状态应用部署) • 部署有状态应用• 解决Pod独立生命周期,保持Pod启动顺序和唯一性1. 稳定,唯一的网络标识符,持久存储2. 有序,优雅的部署和扩展 ...

  6. 个性化你的 Git Log 的输出格式

    个性化你的 Git Log 的输出格式

  7. windows 安装gitea

    gitea 地址https://github.com/go-gitea/gitea windows 安装 

  8. Python - 错误和异常 - 第十九天

    Python 错误和异常 作为 Python 初学者,在刚学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍. Python 有两种错误很容易辨认:语法错误和 ...

  9. 小鸟初学Shell编程(六)变量赋值

    变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...

  10. iFrmae_HTML

    iframe(HTML框架) <iframe src="URL"></iframe> 该URL指向的页面 会显示在当前页面的一个窗口上,默认大小为 widt ...