.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 ...
随机推荐
- ubuntu / zsh shell / oh-my-zsh / 常用插件
记录一下 zsh 的下载与配置,省得每次重装系统都要上网到处查. 安装 zsh shell sudo apt install zsh 切换 shell chsh -s /bin/zsh 安装 oh-m ...
- LeetCode20——有效的括号
在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试.想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了 ...
- HTML+css基础 css的几种形式 css选择器的两大特性
3.外联样式 css选择器的两大特性 1.继承性:所有跟文本字体有关的属性都会被子元素继承.且权重是0000. 2.层叠性:就是解决选择器权重大小的一种能力,就是看那个选择器的权重大.谁的权重大听谁的 ...
- argparse.ArgumentParser()用法解析
本博客主要本人学习记录用. 内容来源 于博客:https://blog.csdn.net/the_time_runner/article/details/97941409 argparse模块官方文档 ...
- Netty中的ChannelFuture和ChannelPromise
在Netty使用ChannelFuture和ChannelPromise进行异步操作的处理 这是官方给出的ChannelFutur描述 * | Completed successfully | * + ...
- RFC函数的初步使用-同步
1.由于没有外围系统,采用不同SAP不同client之间进行测试. 首先在A-client搭建需要被调用的RFC函数.在A-client里运行SE37创建函数 在属性页签选择“远程启用的模块” 设定i ...
- 通俗的讲,就是高层模块定义接口,低层模块负责实现。 Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象。 抽象不不应该依赖于实现,实现应该依赖于抽象。
通俗的讲,就是高层模块定义接口,低层模块负责实现. Bob Martins对DIP的定义: 高层模块不应依赖于低层模块,两者应该依赖于抽象. 抽象不不应该依赖于实现,实现应该依赖于抽象. 总结出使用D ...
- Jar 打包与执行
Java学习笔记之一,用于个人记录.整理自<Head First Java>. 假设有如下目录结构: 程序入口在 Jukebox8.java.这个代码文件开头是有如下这样的包声明语句的: ...
- C# .NET 使用 NPOI 读取 .xlsx 格式 Excel
string filePath = @"C:\Users\yangqinglin\Desktop\test.xlsx"; IWorkbook wk = null; string e ...
- Vert.x HTTP 服务器与客户端
编写HTTP 服务器与客户端 Vert.x让编写非阻塞的HTTP 服务器与客户端变得非常轻松. 创建HTTP 服务器 缺省状况: HttpServer server = vertx.createHtt ...