<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# 枚舉操作工具類的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!