<span style="font-size:14px;">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 { /// <summary> /// 罗列操纵类 /// </summary> public static class EnumOperation { #region 从罗列中猎取Description /// <summary> /// 从罗列中猎取Description /// </summary> /// <param name="enumName">须要猎取罗列形貌的罗列</param> /// <returns>形貌内容</returns> 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) /// <summary> /// 猎取字段Description /// </summary> /// <param name="fieldInfo">FieldInfo</param> /// <returns>DescriptionAttribute[] </returns> 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猎取罗列定义字符串 /// <summary> /// 依据Description猎取罗列定义字符串 /// </summary> /// <typeparam name="T">罗列范例</typeparam> /// <param name="description">罗列形貌</param> /// <returns>罗列</returns> public static T GetEnumName<T>(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 /// <summary> /// 将罗列转换为ArrayList /// 申明: /// 若不是罗列范例,则返回NULL /// </summary> /// <param name="type">罗列范例</param> /// <returns>ArrayList</returns> 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<Enum, string>(value, GetDescription(value))); } return _array; } return null; } catch (Exception) { throw; } } #endregion #region 依据罗列值获得属性Description中的形貌, 假如没有定义此属性则返回空串 /// <summary> /// 依据罗列值获得属性Description中的形貌, 假如没有定义此属性则返回空串 /// </summary> /// <param name="value"></param> /// <param name="enumType"></param> /// <returns></returns> public static String GetEnumDescriptionString(int value, Type enumType) { try { NameValueCollection nvc = GetNVCFromEnumValue(enumType); return nvc[value.ToString()]; } catch (Exception) { throw; } } #endregion #region 依据罗列范例获得其所有的值 与 罗列定义Description属性 的鸠合 /// <summary> /// 依据罗列范例获得其所有的 值 与 罗列定义Description属性 的鸠合 /// </summary> /// <param name="enumType"></param> /// <returns></returns> 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 依据罗列值获得响应的罗列定义字符串 /// <summary> ///依据罗列值获得响应的罗列定义字符串 /// </summary> /// <param name="value"></param> /// <param name="enumType"></param> /// <returns></returns> public static String GetEnumString(int value, Type enumType) { try { NameValueCollection nvc = GetEnumStringFromEnumValue(enumType); return nvc[value.ToString()]; } catch (Exception) { throw; } } #endregion #region 依据罗列范例获得其所有的 值 与 罗列定义字符串 的鸠合 /// <summary> /// 依据罗列范例获得其所有的 值 与 罗列定义字符串 的鸠合 /// </summary> /// <param name="enumType"></param> /// <returns></returns> 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 } }</span>
假如晓得罗列的编号就是谁人int范例的数字,猎取name直接强转就能够 (罗列范例)(int值)
小注:
关于基本大众要领类来讲,个中最好不是猎取非常直接抛出,牢记不要吞掉或许只抛出部份信息。
以上就是C# 罗列操纵东西类的内容,更多相关内容请关注ki4网(www.ki4.cn)!