C# 中 枚举Enum 一些转换的方法整理

 工作中 经常遇到枚举 的一些转换  特别是获取枚举备注等  特地整理下 方法以后使用

public void TestMethod1()
        {
            TestEnumOne colorEnum = TestEnumOne.Red;
            int colorValue = 0x0000FF;
            string colorStr = "Red";
            string colorDes = "红色";

            //枚举To枚举字符串
            colorStr = colorEnum.ToString();
            colorStr = Enum.GetName(typeof(TestEnumOne), colorEnum);
            //枚举值To枚举字符串
            colorStr = Enum.GetName(typeof(TestEnumOne), colorValue);

            //枚举To枚举值
            colorValue = colorEnum.GetHashCode();
            colorValue = (int)colorEnum;
            //枚举字符To枚举值
            colorValue = Enum.Parse(typeof(TestEnumOne), colorStr).GetHashCode();
            colorValue = (int)Enum.Parse(typeof(TestEnumOne), colorStr);

            //枚举字To枚举
            colorEnum = (TestEnumOne)Enum.Parse(typeof(TestEnumOne), colorStr);
            //枚举值To枚举
            colorEnum = (TestEnumOne)colorValue;

            //根据枚举获取备注
            colorDes = TestEnumOne.Red.GetEnumDescriptionByEnum(typeof(TestEnumOne));
            //根据枚举值获取备注
            colorDes = TestEnumOne.Blue.GetEnumDescriptionByEnumValue(typeof(TestEnumOne), colorValue);
            //根据枚举字符串获取备注
            colorDes = TestEnumOne.Blue.GetEnumDescriptionByEnumString(typeof(TestEnumOne), colorStr);
        }

  下面是一个 枚举  和上面用到的一些方法

public static class EnumClass
    {
        public enum TestEnumOne
        {
            [Description("红色")]
            Red = 0xff0000,
            [Description("橙色")]
            Orange = 0xFFA500,
            [Description("黄色")]
            Yellow = 0xFFFF00,
            [Description("蓝色")]
            Blue = 0x0000FF,
        }

        /// <summary>
        /// 根据枚举获取备注
        /// </summary>
        /// <param name="aEnum">枚举</param>
        /// <param name="enumType">枚举类型</param>
        /// <returns>备注</returns>
        public static string GetEnumDescriptionByEnum(this Enum aEnum, System.Type enumType)
        {
            string enumDescription = string.Empty;
            foreach (System.Enum enumItem in System.Enum.GetValues(enumType))
            {
                string enumString = Enum.GetName(enumType, aEnum);
                if (enumString.ToLower() == Enum.GetName(enumType, enumItem).ToLower())
                {
                    FieldInfo fi = enumType.GetField(enumString);
                    DescriptionAttribute da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, enumType);
                    if (da != null)
                    {
                        enumDescription = da.Description;
                    }
                }
            }
            return enumDescription;
        }

        /// <summary>
        /// 根据枚举值获取备注
        /// </summary>
        /// <param name="aEnum">枚举</param>
        /// <param name="enumType">枚举类型</param>
        /// <param name="enumValue">枚举值</param>
        /// <returns>备注</returns>
        public static string GetEnumDescriptionByEnumValue(this Enum aEnum, System.Type enumType, int enumValue)
        {
            string enumDescription = string.Empty;
            foreach (System.Enum enumItem in System.Enum.GetValues(enumType))
            {
                if (enumItem.GetHashCode() == (int)enumValue)
                {
                    string enumString = Enum.GetName(enumType, enumValue);
                    FieldInfo fi = enumType.GetField(enumString);
                    DescriptionAttribute da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, enumType);
                    if (da != null)
                    {
                        enumDescription = da.Description;
                    }
                }
            }
            return enumDescription;
        }

        /// <summary>
        /// 根据枚举字符串获取备注
        /// </summary>
        /// <param name="aEnum">枚举</param>
        /// <param name="enumType">枚举类型</param>
        /// <param name="enumValue">枚举值</param>
        /// <returns>备注</returns>
        public static string GetEnumDescriptionByEnumString(this Enum aEnum, System.Type enumType, string enumString)
        {
            string enumDescription = string.Empty;
            foreach (System.Enum enumItem in System.Enum.GetValues(enumType))
            {
                if (enumString.ToLower() == Enum.GetName(enumType, enumItem).ToLower())
                {
                    FieldInfo fi = enumType.GetField(enumString);
                    DescriptionAttribute da = (DescriptionAttribute)Attribute.GetCustomAttribute(fi, enumType);
                    if (da != null)
                    {
                        enumDescription = da.Description;
                    }
                }
            }
            return enumDescription;
        }
    }

 

posted @ 2017-06-28 18:09  burg-xun  阅读(1085)  评论(0编辑  收藏  举报