歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C#枚舉類型的常用操作總結

枚舉類型是定義了一組“符號名稱/值”配對。枚舉類型是強類型的。每個枚舉類型都是從system.Enum派生,又從system.ValueType派生,而system.ValueType又從system.Object派生,所以枚舉類型是指類型。

編譯枚舉類型時,C#編譯器會把每個符號轉換成類型的一個常量字段。C#編譯器將枚舉類型視為基元類型。

1.獲取枚舉列表:

1.獲取枚舉列表:

        /// <summary>
        /// 獲取枚舉列表
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <returns>枚舉列表</returns>
        public static Dictionary<int, string> GetEnumList(Type enumType)
        {
            var dic = new Dictionary<int, string>();
            try
            {
                var fd = enumType.GetFields();
                for (var index = 1; index < fd.Length; ++index)
                {
                    var info = fd[index];
                    var fieldValue = System.Enum.Parse(enumType, fd[index].Name);
                    var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
                    foreach (EnumTextAttribute attr in attrs)
                    {
                        var key = (int)fieldValue;
                        if (key == -100) continue;
                        var value = attr.Text;
                        dic.Add(key, value);
                    }
                }
                return dic;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

2.獲取枚舉名稱:

        /// <summary>
        /// 獲取枚舉名稱
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="id">枚舉值</param>
        /// <returns>如果枚舉值存在,返回對應的枚舉名稱,否則,返回空字符</returns>
        public static string GetEnumTextById(Type enumType, int id)
        {
            var ret = string.Empty;
            try
            {
                var dic = GetEnumList(enumType);
                foreach (var item in dic)
                {
                    if (item.Key != id) continue;
                    ret = item.Value;
                    break;
                }
                return ret;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

3.根據枚舉值獲取對應中文描述:

        /// <summary>
        /// 根據枚舉值獲取對應中文描述
        /// </summary>
        /// <param name="enumValue">枚舉值</param>
        /// <returns>枚舉值中文描述</returns>
        public static string GetEnumTextByEnum(object enumValue)
        {
            var ret = string.Empty;
            if ((int)enumValue == -1) return ret;
            try
            {
                var dic = GetEnumList(enumValue.GetType());
                foreach (var item in dic)
                {
                    if (item.Key != (int)enumValue) continue;
                    ret = item.Value;
                    break;
                }
                return ret;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

4.獲取枚舉名稱:

        /// <summary>
        /// 獲取枚舉名稱
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="index">枚舉值的位置編號</param>
        /// <returns>如果枚舉值存在,返回對應的枚舉名稱,否則,返回空字符</returns>
        public static string GetEnumTextByIndex(Type enumType, int index)
        {
            var ret = string.Empty;
            var dic = GetEnumList(enumType);
            if (index < 0 || index > dic.Count)
                return ret;
            var i = 0;
            foreach (var item in dic)
            {
                if (i == index)
                {
                    ret = item.Value;
                    break;
                }
                i++;
            }
 
            return ret;
        }

5.獲取枚舉值:

        /// <summary>
        /// 獲取枚舉值
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="name">枚舉名稱</param>
        /// <returns>如果枚舉名稱存在,返回對應的枚舉值,否則,返回-1</returns>
        public static int GetEnumIdByName(Type enumType, string name)
        {
            var ret = -1;
            if (string.IsNullOrEmpty(name))
                return ret;
            var dic = GetEnumList(enumType);
            foreach (var item in dic)
            {
                if (string.Compare(item.Value, name, StringComparison.Ordinal) != 0) continue;
                ret = item.Key;
                break;
            }
            return ret;
        }

6.獲取名字對應枚舉值:

        /// <summary>
        /// 獲取名字對應枚舉值
        /// </summary>
        /// <typeparam name="T">枚舉類型</typeparam>
        /// <param name="name">枚舉名稱</param>
        /// <returns></returns>
        public static T GetEnumIdByName<T>(string name) where T : new()
        {
            var type = typeof(T);
 
            var enumItem = (T)TypeDescriptor.GetConverter(type).ConvertFrom("-1");
            if (string.IsNullOrEmpty(name))
                return enumItem;
 
            try
            {
                var fd = typeof(T).GetFields();
                for (var index = 1; index < fd.Length; ++index)
                {
                    var info = fd[index];
                    var fieldValue = System.Enum.Parse(type, fd[index].Name);
                    var attrs = info.GetCustomAttributes(typeof(EnumTextAttribute), false);
                    if (attrs.Length != 1) continue;
                    var attr = (EnumTextAttribute)attrs[0];
                    if (!name.Equals(attr.Text)) continue;
                    enumItem = (T)fieldValue;
                    break;
                }
                return enumItem;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

7.獲取枚舉值所在的位置編號:

        /// <summary>
        /// 獲取枚舉值所在的位置編號
        /// </summary>
        /// <param name="enumType">枚舉的類型</param>
        /// <param name="name">枚舉名稱</param>
        /// <returns>如果枚舉名稱存在,返回對應的枚舉值的位置編號,否則,返回-1</returns>
        public static int GetEnumIndexByName(Type enumType, string name)
        {
            var ret = -1;
 
            if (string.IsNullOrEmpty(name))
                return ret;
 
            var dic = GetEnumList(enumType);
            var i = 0;
            foreach (var item in dic)
            {
                if (string.Compare(item.Value, name, StringComparison.Ordinal) == 0)
                {
                    ret = i;
                    break;
                }
                i++;
            }
 
            return ret;
        }

Copyright © Linux教程網 All Rights Reserved