C# 枚舉操作工具類

來源:互聯網
上載者:User
<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)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.