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 "";
}
}
}
*
*
*
305

被折叠的 条评论
为什么被折叠?



