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 == 1) { string v = ((TextAttribute)attrs[0]).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 > 0) { TextAttribute descAttr = objAttrs[0] 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; } }
作 者:大師兄丶
出 处:http://www.cnblogs.com/zhao-yi
Git 地 址:https://github.com/ZhaoYis
个人博客:http://www.zhaoyis.com.cn
关于作者:主要从事基于.Net Framework平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!
出 处:http://www.cnblogs.com/zhao-yi
Git 地 址:https://github.com/ZhaoYis
个人博客:http://www.zhaoyis.com.cn
关于作者:主要从事基于.Net Framework平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!