一般情况我们会用枚举类型来存储一些状态信息,而这些信息有时候需要在前端展示,所以需要展示中文注释描述。

为了方便获取这些信息,就封装了一个枚举扩展类。

    /// <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 CommodityOrderState
{
/// <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 CommodityOrderState State { get; set; }
/// <summary>
/// 订单状态描述
/// </summary>
public string StateDesc => State.GetDescription();

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

.net工具类 获取枚举类型的描述的更多相关文章

  1. 获取枚举类型的描述description

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  2. 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。

    1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...

  3. Spring普通类/工具类获取并调用Spring service对象的方法

    参考<Spring普通类获取并调用Spring service方法>,网址:https://blog.csdn.net/jiayi_0803/article/details/6892455 ...

  4. 获取枚举类型Description特性的描述信息

    C#中可以对枚举类型用Description特性描述. 如果需要对Description信息获取,那么可以定义一个扩展方法来实现.代码如下: public static class EnumExten ...

  5. C# 枚举类型的描述信息获取

    新建一个控制台方法,写好自己的枚举类型: 如图: 在里面添加获取描述的方法: 具体源码: 链接:http://pan.baidu.com/s/1nv4rGkp 密码:byz8

  6. C#枚举扩展方法,获取枚举值的描述值以及获取一个枚举类下面所有的元素

    /// <summary> /// 枚举扩展方法 /// </summary> public static class EnumExtension { private stat ...

  7. Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

    Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...

  8. Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解

    Java中的常用类 1.Math : 位于java.lang包中 (1)Math.PI:返回一个最接近圆周率的 (2)Math.abs(-10):返回一个数的绝对值 (3)Math.cbrt(27): ...

  9. java工具类 获取包下所有类

    extends:http://blog.csdn.net/jdzms23/article/details/17550119 package com.threeti.util; import java. ...

随机推荐

  1. 【爆料】-《西澳大学毕业证书》UWA一模一样原件

    ☞西澳大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&a ...

  2. 第四次作业—— 性能测试(含JMeter实验)

    一.回答下述问题 1.性能测试有几种类型?它们之间什么关系? 答:性能测试根据其不同的测试目的分为以下几类. (1)性能验证测试:验证系统是否达到事先已定义的系统性能指标.能否满足系统的性能需求.这种 ...

  3. Docker入门学习

    Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...

  4. HTTPS和TCP协议三次握手设计

    1. 我们的TCP 三次握手大概是长这样 2.那么为什么 TCP 要采取三次握手,而不是两次或其他 首先我们要知道握手的目的: 为了保证通讯双方建立的连接是可靠的. 同时,为了保证性能,握手的次数要求 ...

  5. Scrapy爬取Ajax(异步加载)网页实例——简书付费连载

    这两天学习了Scrapy爬虫框架的基本使用,练习的例子爬取的都是传统的直接加载完网页的内容,就想试试爬取用Ajax技术加载的网页. 这里以简书里的优选连载网页为例分享一下我的爬取过程. 网址为: ht ...

  6. 设计模式 | 工厂方法模式(factory method)

    定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 结构:(书中图,侵删) 一个工厂的抽象接口 若干个具体的工厂类 一个需要创建对象的抽象接口 若干个 ...

  7. Odoo:全球第一免费开源ERP权威性能测试报告完整版(绝对珍藏)

    Odoo平台简介 Odoo(以前叫OpenERP)是世界排名第一的开源ERP系统,最早由比利时一家公司开发,经过十几年发展,目前全世界Odoo的使用者超过2百万人,Odoo被翻译成几十种语言,Odoo ...

  8. 一、Activity的生命周期和启动模式

    1.Activity的生命周期 1.1.典型情况下的生命周期 在有用户参与的情况下,Activity所经过的生命周期的改变. Activity会经历如下生命周期: onCreate-onRestart ...

  9. bat脚本+diskpart 脚本实现自动划分磁盘分区

    我提供的脚本只是案例展示,真实场景需要自行修改.(正好我今天看到一个规范的bat脚本,我放出来,大家一起学习下) 要求:将20G的磁盘1,分出4G为主分区,4G扩展分区(2个2G逻辑分区) 试验环境: ...

  10. CMake简介

    目录 一.CMake简介 二.CMake典型示例 源代码 demo.cpp cmake脚本 CMakeLists.txt 编译流程 三.CMake常用命令 常用命令介绍 设置编译目标类型 指定编译包含 ...