C# Enum 枚举操作

C# Emum 枚举值操作

1、EnumHelper.cs 帮助类

using System.ComponentModel;

namespace WebApplication2
{
    public static class EnumHelper
    {
        /// <summary>
        /// 获取枚举描述值
        /// </summary>
        /// <param name="value">枚举值</param>
        /// <returns></returns>
        public static string GetDescription(this System.Enum value)
        {
            var fi = value.GetType().GetField(value.ToString());
            var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
            return attributes.Length > 0 ? attributes[0].Description : string.Empty;
        }

        /// <summary>
        /// 根据枚举值获取名称
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string GetName<T>(int value)
        {
            string name = System.Enum.Parse(typeof(T), System.Enum.GetName(typeof(T), value) ?? string.Empty).ToString() ?? string.Empty;
            return name;
        }

        /// <summary>
        /// 根据描述获取枚举下标
        /// </summary>
        /// <typeparam name="T">枚举</typeparam>
        /// <param name="type">类型</param>
        /// <param name="descriptionValue">描述值</param>
        /// <returns></returns>
        public static int GetValueByDescription<T>(this Type type, string descriptionValue) where T : struct
        {
            var enumValue = 0;
            foreach (var value in System.Enum.GetValues(type))
            {
                var attribute = typeof(T).GetField(value.ToString() ?? string.Empty).GetCustomAttributes(typeof(DescriptionAttribute), false);

                if (attribute != null && ((DescriptionAttribute)attribute[0]).Description == descriptionValue)
                {
                    enumValue = Convert.ToInt32(value);
                }
            }
            return enumValue;
        }

        /// <summary>
        /// 获取枚举所有名称
        /// </summary>
        /// <param name="enumType">枚举类型typeof(T)</param>
        /// <returns>枚举名称列表</returns>
        public static List<string> GetEnumNamesList(this Type enumType)
        {
            return Enum.GetNames(enumType).ToList();
        }

        /// <summary>
        /// 获取所有枚举对应的值
        /// </summary>
        /// <param name="enumType">枚举类型typeof(T)</param>
        /// <returns>枚举值列表</returns>
        public static List<int> GetEnumValuesList(this Type enumType)
        {
            var list = new List<int>();
            foreach (var value in Enum.GetValues(enumType))
            {
                list.Add(Convert.ToInt32(value));
            }
            return list;
        }

        /// <summary>
        /// 获取枚举名以及对应的Description
        /// </summary>
        /// <param name="type">枚举类型typeof(T)</param>
        /// <returns>返回Dictionary  ,Key为枚举名,  Value为枚举对应的Description</returns>
        public static Dictionary<object, object> GetNameAndDescriptions(this Type type)
        {
            if (type.IsEnum)
            {
                var dic = new Dictionary<object, object>();
                var enumValues = Enum.GetValues(type);
                foreach (Enum value in enumValues)
                {
                    dic.Add(value, GetDescription(value));
                }
                return dic;
            }
            return null;
        }

        /// <summary>
        /// 获取枚举名以及对应的Value
        /// </summary>
        /// <param name="type">枚举类型typeof(T)</param>
        /// <returns>返回Dictionary  ,Key为描述名,  Value为枚举对应的值</returns>
        public static Dictionary<object, object> GetNameAndValue(this Type type)
        {
            if (type.IsEnum)
            {
                var dic = new Dictionary<object, object>();
                var enumValues = Enum.GetValues(type);
                foreach (Enum value in enumValues)
                {
                    dic.Add(GetDescription(value), value.GetHashCode());
                }
                return dic;
            }
            return null;
        }
    }
}

2、枚举

    /// <summary>
    /// 角色类型
    /// </summary>
    public enum RoleTypeEnum
    {
        /// <summary>
        /// 超级管理员
        /// </summary>
        [Description("超级管理员")]
        SuperRole = 1,

        /// <summary>
        /// 普遍角色
        /// </summary>
        [Description("普遍角色")]
        OrdinaryRole = 2,
    }

3、EnumController.cs

using Microsoft.AspNetCore.Mvc;

namespace WebApplication2.Controllers
{
    [Route("api/Enum/[action]")]
    [ApiController]
    public class EnumController : ControllerBase
    {
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public string GetTest()
        {
            //获取枚举描述值
            string description = EnumHelper.GetDescription(RoleTypeEnum.OrdinaryRole);//普遍角色
            string description1 = RoleTypeEnum.OrdinaryRole.GetDescription();//普遍角色

            //根据描述获取枚举下标
            int val = EnumHelper.GetValueByDescription<RoleTypeEnum>(typeof(RoleTypeEnum), RoleTypeEnum.OrdinaryRole.GetDescription());
            int val1 = Convert.ToInt32(RoleTypeEnum.OrdinaryRole);

            //返回枚举类型 - 推荐
            RoleTypeEnum super = (RoleTypeEnum)Enum.Parse(typeof(RoleTypeEnum), "1");
            RoleTypeEnum ordinary = (RoleTypeEnum)Enum.Parse(typeof(RoleTypeEnum), 2.ToString());

            //返回枚举类型 - 较少使用
            //RoleTypeEnum super = (RoleTypeEnum)Enum.ToObject(typeof(RoleTypeEnum), 1);
            //RoleTypeEnum ordinary = (RoleTypeEnum)Enum.ToObject(typeof(RoleTypeEnum), 2);

            //根据枚举值获取名称
            string name1 = EnumHelper.GetName<RoleTypeEnum>(1);//SuperRole
            string name2 = EnumHelper.GetName<RoleTypeEnum>(2);//ordinaryRole

            //获取枚举所有名称
            List<string> list1 = EnumHelper.GetEnumNamesList(typeof(RoleTypeEnum));

            //获取所有枚举对应的值
            List<int> list2 = EnumHelper.GetEnumValuesList(typeof(RoleTypeEnum));

            //获取枚举名以及对应的Description
            Dictionary<object, object> list3 = EnumHelper.GetNameAndDescriptions(typeof(RoleTypeEnum));

            //获取枚举名以及对应的Value
            Dictionary<object, object> list4 = EnumHelper.GetNameAndValue(typeof(RoleTypeEnum));

            return "";
        }
    }
}

*
*
*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值