/// <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#枚举扩展方法,获取枚举值的描述值以及获取一个枚举类下面所有的元素的更多相关文章

  1. 枚举扩展方法获取枚举Description

    枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...

  2. 在C#中如何读取枚举值的描述属性

    在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思.比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”). 有下面的枚举: 1 2 3 4 5 6 ...

  3. C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...

  4. C# 知识回顾 - 扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...

  5. [C#详解] (1) 自动属性、初始化器、扩展方法

    文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/CSharp-focus-1.html 代码下载:点我下载 目录 前言 属性与自动属性 属性 自动属 ...

  6. 关于.NET中迭代器的实现以及集合扩展方法的理解

    在C#中所有的数据结构类型都实现IEnumerable或IEnumerable<T>接口(实现迭代器模式),可以实现对集合遍历(集合元素顺序访问).换句话可以这么说,只要实现上面这两个接口 ...

  7. .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

    开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...

  8. [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法

    前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好 ...

  9. Linq之扩展方法

    目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...

随机推荐

  1. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

  2. RabbitMQ与Spring集成配置

    1.引入相关jar包 //RabbitMQ compile group: 'org.springframework.amqp', name: 'spring-rabbit', version: '1. ...

  3. 【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps

    题目如下: You have a pointer at index 0 in an array of size arrLen. At each step, you can move 1 positio ...

  4. 关于dll注入

    例如:     有一个游戏修改器:其中有一个按钮“自动打怪”:点击时游戏会实现相应的功能:     对于游戏程序来说,自动打怪操作本质上就是call调用一个函数:     但是修改器和游戏是两个独立的 ...

  5. RHSA-2018:0014-重要: linux-firmware 安全更新

    修复命令: yum update iwl2030-firmware yum update iwl5000-firmware yum update iwl100-firmware yum update ...

  6. LeetCode687----最长同值路径

    给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值. 这条路径可以经过也可以不经过根节点. 注意:两个节点之间的路径长度由它们之间的边数表示. 示例 1: 输入: 5 / \ 4 5 / ...

  7. Java学习回顾总结

    java-01初识Java见上一篇 Java-02 1.命名规范与规范: 标识符命名规则:首字母为字母|下划线|$ 其余部分数字|字母|下划线|$ 命名规范: 变量属性方法命名规范:第一个单词首字母小 ...

  8. Linux设备驱动程序 之 ioctl

    ioctl 除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制,通常这种需求使用ioctl方法支持,该方法实现了同名的系统调用: 在用户空间,ioctl ...

  9. 2965 -- The Pilots Brothers' refrigerator

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27893 ...

  10. POJ 1837 -- Balance(DP)

     POJ 1837 -- Balance 转载:優YoU   http://user.qzone.qq.com/289065406/blog/1299341345 提示:动态规划,01背包 初看此题第 ...