.net工具类 获取枚举类型的描述

Posted kingpan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net工具类 获取枚举类型的描述相关的知识,希望对你有一定的参考价值。

在做毕设时,由于前后端都需要开发,当时用EasyUI设计。但是在做下拉框时比较麻烦,所以就封装了一个枚举扩展类。

下面开始:

/// <summary>
/// 枚举扩展类
/// </summary>
public static class EnumExtension
{
/// <summary>
/// 获取枚举的描述,需要DescriptionAttribute属性
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public static string GetDescription(this Enum e)
{
//获取枚举的Type类型对象
var type = e.GetType();
//获取枚举的所有字段
var fields = type.GetFields();

//遍历所有枚举的所有字段
foreach (var field in fields)
{
if (field.Name != e.ToString())
{
continue;
}
//第二个参数true表示查找EnumDisplayNameAttribute的继承链

if (field.IsDefined(typeof(DescriptionAttribute), true))
{
var attr = field.GetCustomAttribute(typeof(DescriptionAttribute), false) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}

//如果没有找到自定义属性,直接返回属性项的名称
return e.ToString();
}

/// <summary>
/// 根据枚举获取下拉框列表
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static List<ComboboxItemDto> GetSelectList(this Enum en)
{
var list = new List<ComboboxItemDto>();

foreach (var e in Enum.GetValues(en.GetType()))
{
list.Add(new ComboboxItemDto() { DisplayText = GetDescription(e as Enum), Value = ((int)e).ToString(), IsSelected = e == en });
}

return list;
}

/// <summary>
/// 根据枚举获取下拉框列表
/// </summary>
/// <param name="type">枚举类型</param>
/// <returns></returns>
public static List<ComboboxItemDto> GetSelectList(this Type type)
{
var list = new List<ComboboxItemDto>();

foreach (var e in Enum.GetValues(type))
{
list.Add(new ComboboxItemDto() { DisplayText = GetDescription(e as Enum), Value = ((int)e).ToString() });
}

return list;
}
}

注:   ComboboxItemDto 类来自Abp源码,主要用于提供前端下拉框数据源

主要代码:

//

    // 摘要:

    //     This DTO can be used as a simple item for a combobox/list.

    public class ComboboxItemDto

    {

        //

        // 摘要:

        //     Creates a new Abp.Application.Services.Dto.ComboboxItemDto.

        public ComboboxItemDto();

        //

        // 摘要:

        //     Creates a new Abp.Application.Services.Dto.ComboboxItemDto.

        //

        // 参数:

        //   value:

        //     Value of the item

        //

        //   displayText:

        //     Display text of the item

        public ComboboxItemDto(string value, string displayText);

 

        //

        // 摘要:

        //     Value of the item.

        public string Value { get; set; }

        //

        // 摘要:

        //     Display text of the item.

        public string DisplayText { get; set; }

        //

        // 摘要:

        //     Is selected?

        public bool IsSelected { get; set; }

    }

为了能更清楚得理解,下面举例说明:

 /// <summary>

    /// 商品订单状态

    /// </summary>

    public enum RPurState

    {

        /// <summary>

        /// 待付款

        /// </summary>

        [Description("待付款")]

        PendingPay,

        /// <summary>

        /// 待发货

        /// </summary>

        [Description("待发货")]

        PendingShip,

        /// <summary>

        /// 待收货

        /// </summary>

        [Description("待收货")]

        PendingReceipt,

        /// <summary>

        /// 待评价

        /// </summary>

        [Description("待评价")]

        PendingEvaluation,

        /// <summary>

        /// 已评价

        /// </summary>

        [Description("已评价")]

        Evaluated,

        /// <summary>

        /// 已退款

        /// </summary>

        [Description("已退款")]

        Refunded = 100

    }

这是一个订单DTO,一般会存在订单状态字段,就像这样。

 

        /// <summary>

        /// 订单状态(这个字段会通过AutoMapper自动映射)

        /// </summary>

        public RPurState State { get; set; }

        /// <summary>

        /// 订单状态描述

        /// </summary>

        public string StateDesc => State.GetDescription();

 

好了,这样前端就能拿到订单状态描述信息了,是不是很方便。

技术图片

 

以上是关于.net工具类 获取枚举类型的描述的主要内容,如果未能解决你的问题,请参考以下文章

.net工具类 获取枚举类型的描述

C# 根据数字值获取相应枚举

java枚举类型

java枚举类型

static_cast 从底层类型值到枚举类并切换以获取编译器帮助

JAVA枚举类型