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

2021-03-10 12:28

阅读:598

标签:The   loading   field   收货   getc   each   fun   img   new   

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

下面开始:

///


/// 枚举扩展类
///

public static class EnumExtension
{
///
/// 获取枚举的描述,需要DescriptionAttribute属性
///

///
///
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();
}

///


/// 根据枚举获取下拉框列表
///

///
///
public static List GetSelectList(this Enum en)
{
var list = new List();

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;
}

///


/// 根据枚举获取下拉框列表
///

/// 枚举类型
///
public static List GetSelectList(this Type type)
{
var list = new List();

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; }

    }

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

 ///

    /// 商品订单状态

    ///

    public enum RPurState

    {

        ///

        /// 待付款

        ///

        [Description("待付款")]

        PendingPay,

        ///

        /// 待发货

        ///

        [Description("待发货")]

        PendingShip,

        ///

        /// 待收货

        ///

        [Description("待收货")]

        PendingReceipt,

        ///

        /// 待评价

        ///

        [Description("待评价")]

        PendingEvaluation,

        ///

        /// 已评价

        ///

        [Description("已评价")]

        Evaluated,

        ///

        /// 已退款

        ///

        [Description("已退款")]

        Refunded = 100

    }

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

 

        ///

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

        ///

        public RPurState State { get; set; }

        ///

        /// 订单状态描述

        ///

        public string StateDesc => State.GetDescription();

 

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

技术图片

 

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

标签:The   loading   field   收货   getc   each   fun   img   new   

原文地址:https://www.cnblogs.com/KingPan/p/12851669.html


评论


亲,登录后才可以留言!