C#枚举类型的常用操作总结-创新互联

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

我们提供的服务有:成都网站建设、成都做网站、微信公众号开发、网站优化、网站认证、原平ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的原平网站制作公司

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

 1.获取枚举列表:

C#枚举类型的常用操作总结

        /// 
        /// 获取枚举列表        /// 
        /// 枚举的类型
        /// 枚举列表
        public static Dictionary GetEnumList(Type enumType)
        {            var dic = new Dictionary();            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);
            }
        }

C#枚举类型的常用操作总结

2.获取枚举名称:

C#枚举类型的常用操作总结

        /// 
        /// 获取枚举名称        /// 
        /// 枚举的类型
        /// 枚举值
        /// 如果枚举值存在,返回对应的枚举名称,否则,返回空字符
        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);
            }
        }

C#枚举类型的常用操作总结

3.根据枚举值获取对应中文描述:新航道培训

C#枚举类型的常用操作总结

        /// 
        /// 根据枚举值获取对应中文描述        /// 
        /// 枚举值
        /// 枚举值中文描述
        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);
            }
        }

C#枚举类型的常用操作总结

4.获取枚举名称:

C#枚举类型的常用操作总结

        /// 
        /// 获取枚举名称        /// 
        /// 枚举的类型
        /// 枚举值的位置编号
        /// 如果枚举值存在,返回对应的枚举名称,否则,返回空字符
        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;
        }

C#枚举类型的常用操作总结

5.获取枚举值:

C#枚举类型的常用操作总结

        /// 
        /// 获取枚举值        /// 
        /// 枚举的类型
        /// 枚举名称
        /// 如果枚举名称存在,返回对应的枚举值,否则,返回-1
        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;
        }

C#枚举类型的常用操作总结

6.获取名字对应枚举值:

C#枚举类型的常用操作总结

        /// 
        /// 获取名字对应枚举值        /// 
        /// 枚举类型
        /// 枚举名称
        /// 
        public static T GetEnumIdByName(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);
            }
        }

C#枚举类型的常用操作总结

7.获取枚举值所在的位置编号:

C#枚举类型的常用操作总结

        /// 
        /// 获取枚举值所在的位置编号        /// 
        /// 枚举的类型
        /// 枚举名称
        /// 如果枚举名称存在,返回对应的枚举值的位置编号,否则,返回-1
        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;
        }

C#枚举类型的常用操作总结

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:C#枚举类型的常用操作总结-创新互联
网页路径:http://csdahua.cn/article/disjoh.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流