using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;using System.ComponentModel;using System.Collections;using System.Collections.Specialized;namespace JianKunKing.Common.EnumClass{ /// /// 枚举操作类 /// public static class EnumOperation { #region 从枚举中获取Description /// /// 从枚举中获取Description /// /// 需要获取枚举描述的枚举 /// 描述内容 public static string GetDescription(Enum enumName) { try { string _description = string.Empty; FieldInfo _fieldInfo = enumName.GetType().GetField(enumName.ToString()); DescriptionAttribute[] _attributes = GetDescriptAttr(_fieldInfo); if (_attributes != null && _attributes.Length > 0) { _description = _attributes[0].Description; } else { _description = enumName.ToString(); } return _description; } catch (Exception) { throw; } } #endregion #region 获取字段Description(private) /// /// 获取字段Description /// /// FieldInfo /// DescriptionAttribute[] private static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo) { try { if (fieldInfo != null) { return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); } return null; } catch (Exception) { throw; } } #endregion #region 根据Description获取枚举定义字符串 /// /// 根据Description获取枚举定义字符串 /// /// 枚举类型 /// 枚举描述 /// 枚举 public static T GetEnumName(string description) { Type _type = typeof(T); foreach (FieldInfo field in _type.GetFields()) { DescriptionAttribute[] _curDesc = field.GetDescriptAttr(); if (_curDesc != null && _curDesc.Length > 0) { if (_curDesc[0].Description == description) { return (T)field.GetValue(null); } } else { if (field.Name == description) { return (T)field.GetValue(null); } } } throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description"); } #endregion #region 将枚举转换为ArrayList /// /// 将枚举转换为ArrayList /// 说明: /// 若不是枚举类型,则返回NULL /// /// 枚举类型 /// ArrayList public static ArrayList ToArrayList(Type type) { try { if (type.IsEnum) { ArrayList _array = new ArrayList(); Array _enumValues = Enum.GetValues(type); foreach (Enum value in _enumValues) { _array.Add(new KeyValuePair(value, GetDescription(value))); } return _array; } return null; } catch (Exception) { throw; } } #endregion #region 根据枚举值得到属性Description中的描述, 如果没有定义此属性则返回空串 /// /// 根据枚举值得到属性Description中的描述, 如果没有定义此属性则返回空串 /// /// /// /// public static String GetEnumDescriptionString(int value, Type enumType) { try { NameValueCollection nvc = GetNVCFromEnumValue(enumType); return nvc[value.ToString()]; } catch (Exception) { throw; } } #endregion #region 根据枚举类型得到其所有的值 与 枚举定义Description属性 的集合 /// /// 根据枚举类型得到其所有的 值 与 枚举定义Description属性 的集合 /// /// /// public static NameValueCollection GetNVCFromEnumValue(Type enumType) { try { NameValueCollection nvc = new NameValueCollection(); Type typeDescription = typeof(DescriptionAttribute); System.Reflection.FieldInfo[] fields = enumType.GetFields(); string strText = string.Empty; string strValue = string.Empty; foreach (FieldInfo field in fields) { if (field.FieldType.IsEnum) { strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString(); object[] arr = field.GetCustomAttributes(typeDescription, true); if (arr.Length > 0) { DescriptionAttribute aa = (DescriptionAttribute)arr[0]; strText = aa.Description; } else { strText = ""; } nvc.Add(strValue, strText); } } return nvc; } catch (Exception) { throw; } } #endregion #region 根据枚举值得到相应的枚举定义字符串 /// ///根据枚举值得到相应的枚举定义字符串 /// /// /// /// public static String GetEnumString(int value, Type enumType) { try { NameValueCollection nvc = GetEnumStringFromEnumValue(enumType); return nvc[value.ToString()]; } catch (Exception) { throw; } } #endregion #region 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合 /// /// 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合 /// /// /// public static NameValueCollection GetEnumStringFromEnumValue(Type enumType) { try { NameValueCollection nvc = new NameValueCollection(); Type typeDescription = typeof(DescriptionAttribute); System.Reflection.FieldInfo[] fields = enumType.GetFields(); string strText = string.Empty; string strValue = string.Empty; foreach (FieldInfo field in fields) { if (field.FieldType.IsEnum) { strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString(); nvc.Add(strValue, field.Name); } } return nvc; } catch (Exception) { throw; } } #endregion }}
如果知道枚举的编号就是那个int类型的数字,获取name直接强转就可以 (枚举类型)(int值)
小注:
对于基础公共方法类来说,其中最好不是获取异常直接抛出,切记不要吞掉或者只抛出部分信息。
以上就是C# 枚举操作工具类的内容,更多相关内容请关注PHP中文网(www.php.cn)!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432308.html
微信扫一扫
支付宝扫一扫