C#枚举扩展方法,获取枚举值的描述值以及获取一个枚举类下面所有的元素
/// <summary>
/// 枚举扩展方法
/// </summary>
public static class EnumExtension
{
private static Dictionary<string, Dictionary<string, string>> _enumCache; /// <summary>
/// 缓存
/// </summary>
private static Dictionary<string, Dictionary<string, string>> EnumCache
{
get { return _enumCache ?? (_enumCache = new Dictionary<string, Dictionary<string, string>>()); }
set { _enumCache = value; }
} /// <summary>
/// 获取枚举描述信息
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string GetEnumText(this System.Enum en)
{
string enString = string.Empty;
if (null == en) return enString; Type type = en.GetType();
enString = en.ToString();
if (!EnumCache.ContainsKey(type.FullName))
{
System.Reflection.FieldInfo[] fields = type.GetFields();
Dictionary<string, string> temp = new Dictionary<string, string>();
foreach (FieldInfo item in fields)
{
object[] attrs = item.GetCustomAttributes(typeof(TextAttribute), false);
if (attrs.Length == )
{
string v = ((TextAttribute)attrs[]).Value;
temp.Add(item.Name, v);
}
}
EnumCache.Add(type.FullName, temp);
}
if (EnumCache[type.FullName].ContainsKey(enString))
{
return EnumCache[type.FullName][enString];
}
return enString;
} /// <summary>
/// 遍历枚举对象的所有元素
/// </summary>
/// <typeparam name="T">枚举对象</typeparam>
/// <returns>Dictionary:枚举值-描述</returns>
public static Dictionary<int, string> GetEnumValues<T>()
{
Dictionary<int, string> dictionary = new Dictionary<int, string>();
foreach (var code in System.Enum.GetValues(typeof(T)))
{
////获取名称
//string strName = System.Enum.GetName(typeof(T), code); object[] objAttrs = code.GetType().GetField(code.ToString()).GetCustomAttributes(typeof(TextAttribute), true);
if (objAttrs.Length > )
{
TextAttribute descAttr = objAttrs[] as TextAttribute;
if (!dictionary.ContainsKey((int)code))
{
if (descAttr != null) dictionary.Add((int)code, descAttr.Value);
}
//Console.WriteLine(string.Format("[{0}]", descAttr.Value));
}
//Console.WriteLine(string.Format("{0}={1}", code.ToString(), Convert.ToInt32(code)));
}
return dictionary;
} } /// <summary>
/// 自定义描述
/// </summary>
public class TextAttribute : Attribute
{
public TextAttribute(string value)
{
Value = value;
} /// <summary>
/// 描述信息
/// </summary>
public string Value { get; set; }
}
C#枚举扩展方法,获取枚举值的描述值以及获取一个枚举类下面所有的元素的更多相关文章
- 枚举扩展方法获取枚举Description
枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...
- 在C#中如何读取枚举值的描述属性
在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思.比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”). 有下面的枚举: 1 2 3 4 5 6 ...
- C#的扩展方法解析
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...
- C# 知识回顾 - 扩展方法解析
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...
- [C#详解] (1) 自动属性、初始化器、扩展方法
文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/CSharp-focus-1.html 代码下载:点我下载 目录 前言 属性与自动属性 属性 自动属 ...
- 关于.NET中迭代器的实现以及集合扩展方法的理解
在C#中所有的数据结构类型都实现IEnumerable或IEnumerable<T>接口(实现迭代器模式),可以实现对集合遍历(集合元素顺序访问).换句话可以这么说,只要实现上面这两个接口 ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...
- Linq之扩展方法
目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...
随机推荐
- NPM全局安装软件包时解决EACCES权限错误
NPM全局安装软件包时解决EACCES权限错误 Resolving EACCES permissions errors when installing packages globally npm WA ...
- Redis:Linux环境部署Redis(1)
简介 1.介绍 Redis是开源的(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,例如 字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询的流空间索 ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
- 配置NFS共享
NFS(网络文件系统)-------> linux与linux平台 服务器端: 1.安装软件nfs-utils(服务:nfs-server) 2.创建共享目录:mkdir /nfs_dir 3. ...
- JavaScript相等运算符
★相等运算符 相等运算符用来比较两个值是否相等 如果相等会返回true,否则返回false ㈠使用 == 来做相等运算 ⑴当使用 == 来比较两个值时,如果值的类型不同, 则会自动进行类型转换 ...
- 了解Springboot加载文件机制
https://blog.csdn.net/u014044812/article/details/84256764(
- KindEditor完全复制word内容
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- IntelliJ IDEA 创建 Git 分支并且 Push 到远程
在 IntelliJ 的右下角,你可以看到当前的 Git 分支,然后你可以单击这个分支后,在弹出的界面的最上方有一个新建分支的选项. 然后再弹出的界面中,输入你要创建的分支名称后回车输入. 然后从项目 ...
- luogu4930
P4930 「FJ2014集训」采药人的路径 题目描述 采药人的药田是一个树状结构,每条路径上都种植着同种药材.采药人以自己对药材独到的见解,对每种药材进行了分类.大致分为两类,一种是阴性的,一种是阳 ...
- HTML/HTML5 知识点思维导图
1 - 浏览器 | 浏览器页面构成 2 - 浏览器 | 浏览器内核相关知识点 3 - W3C | 对WEB标准以及W3C的理解与认识? 4 - 标签 | Doctype相关知识点 5 - 标签 | m ...