zoukankan      html  css  js  c++  java
  • C#枚举类型的常用操作总结

       枚举类型是定义了一组“符号名称/值”配对。枚举类型是强类型的。每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型。

       编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段。C#编译器将枚举类型视为基元类型。

     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;
            }
  • 相关阅读:
    Linux内核设计与实现 总结笔记(第五章)系统调用
    Linux内核设计与实现 总结笔记(第四章)进程调度
    Linux内核设计与实现 总结笔记(第三章)进程
    Linux内核设计与实现 总结笔记(第二章)
    4412 移植x264并且YUV422转x264
    4412 使用usb摄像头拍照YUYV格式
    LDD3 第15章 内存映射和DMA
    LDD3 第13章 USB驱动程序
    ldd3 第12章 PCI驱动程序
    4412 移植mpu9250尝试
  • 原文地址:https://www.cnblogs.com/pengze0902/p/5970357.html
Copyright © 2011-2022 走看看