C# 获取枚举的描述Description
方法类:
public static class EnumExtensions
{
#region Enum /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription(this System.Enum obj)
{
return GetDescription(obj, false);
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription(this System.Enum obj, bool isTop)
{
if (obj == null)
{
return string.Empty;
}
try
{
Type enumType = obj.GetType();
DescriptionAttribute dna = null;
if (isTop)
{
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
}
else
{
FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
fi, typeof(DescriptionAttribute));
}
if ((dna != null)
&& (string.IsNullOrEmpty(dna.Description) == false))
{
return dna.Description;
}
}
catch
{
}
return obj.ToString();
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription<TEnum>(this TEnum obj)
{
return GetDescription(obj, false);
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription<TEnum>(this TEnum obj, bool isTop)
{
if (obj == null)
{
return string.Empty;
}
try
{
Type enumType = obj.GetType();
DescriptionAttribute dna = null;
if (isTop)
{
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
}
else
{
FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
fi, typeof(DescriptionAttribute));
}
if ((dna != null)
&& (string.IsNullOrEmpty(dna.Description) == false))
{
return dna.Description;
}
}
catch
{
}
return obj.ToString();
} /// <summary>
/// 获取字段Description
/// </summary>
/// <param name="fieldInfo">FieldInfo</param>
/// <returns>DescriptionAttribute[] </returns>
public static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
{
if (fieldInfo != null)
{
return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
}
return null;
} /// <summary>
/// 根据Description获取枚举
/// 说明:
/// 单元测试-->通过
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="description">枚举描述</param>
/// <returns>枚举</returns>
public static T GetEnumName<T>(string description)
{
Type _type = typeof(T);
foreach (FieldInfo field in _type.GetFields())
{
DescriptionAttribute[] _curDesc = field.GetDescriptAttr();
if (_curDesc != null && _curDesc.Length > )
{
if (_curDesc[].Description == description)
return (T)field.GetValue(null);
}
else
{
if (field.Name == description)
return (T)field.GetValue(null);
}
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.错误枚举{1}", description, _type.Name), "Description");
} /// <summary>
/// 将枚举转换为ArrayList
/// 说明:
/// 若不是枚举类型,则返回NULL
/// 单元测试-->通过
/// </summary>
/// <param name="type">枚举类型</param>
/// <returns>ArrayList</returns>
public static ArrayList ToArrayList(this Type type)
{
if (type.IsEnum)
{
ArrayList _array = new ArrayList();
Array _enumValues = System.Enum.GetValues(type);
foreach (System.Enum value in _enumValues)
{
_array.Add(new KeyValuePair<System.Enum, string>(value, GetDescription(value)));
}
return _array;
}
return null;
} #endregion Enum
}
枚举类:
#region 职员流程类型
/// <summary>
/// 职员流程类型
/// </summary>
[Description("职员流程类型")]
public enum EmployeeAffairTypeEnum
{
/// <summary>
/// 入职
/// </summary>
[Description("入职")]
ApplyInureEmpInPositon,
/// <summary>
/// 转正
/// </summary>
[Description("转正")]
ApplyInureEmpInPass,
/// <summary>
/// 兼职
/// </summary>
[Description("兼职")]
ApplyInureEmpPartJob,
/// <summary>
/// 结束兼职
/// </summary>
[Description("结束兼职")]
ApplyInureEmpEndPartJob,
/// <summary>
/// 异动
/// </summary>
[Description("异动")]
ApplyInureEmpInAdjust,
/// <summary>
/// 离职
/// </summary>
[Description("离职")]
ApplyInureEmpInDimission,
/// <summary>
/// 正式合同续签
/// </summary>
[Description("正式合同续签")]
ApplyInureEmpContractRenewal,
/// <summary>
/// 职员群调审批
/// </summary>
[Description("职员群调审批")]
ApplyInureEmpGroupTransfer,
/// <summary>
/// 行车津贴
/// </summary>
[Description("行车津贴")]
ApplyInureEmpMileage
}
#endregion 职员流程类型
#region 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图
/// <summary>
/// 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图
/// </summary>
[Description("职员申请表视图")]
public enum EmployeeApplyViewEnum
{
/// <summary>
/// 入职
/// </summary>
[Description("VM_ApplyInureEmpInPositon")]
ApplyInureEmpInPositon,
/// <summary>
/// 转正
/// </summary>
[Description("VM_ApplyInureEmpInPass")]
ApplyInureEmpInPass,
/// <summary>
/// 兼职
/// </summary>
[Description("VM_ApplyInureEmpPartJob")]
ApplyInureEmpPartJob,
/// <summary>
/// 结束兼职
/// </summary>
[Description("VM_ApplyInureEmpEndPartJob")]
ApplyInureEmpEndPartJob,
/// <summary>
/// 异动
/// </summary>
[Description("VM_ApplyInureEmpInAdjust")]
ApplyInureEmpInAdjust,
/// <summary>
/// 离职
/// </summary>
[Description("VM_ApplyInureEmpInDimission")]
ApplyInureEmpInDimission,
/// <summary>
/// 正式合同续签
/// </summary>
[Description("VM_ApplyInureEmpContractRenewal")]
ApplyInureEmpContractRenewal,
/// <summary>
/// 职员群调审批
/// </summary>
[Description("VM_ApplyInureEmpGroupTransfer")]
ApplyInureEmpGroupTransfer,
/// <summary>
/// 行车津贴
/// </summary>
[Description("VM_ApplyInureEmpMileage")]
ApplyInureEmpMileage
}
#endregion
调用方法:
var affairDescription = EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal.GetDescription();
Console.WriteLine(affairDescription);
var viewName = ((EmployeeApplyViewEnum)EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal).GetDescription();
Console.WriteLine(viewName);
C# 获取枚举的描述Description的更多相关文章
- .NET获取枚举DescriptionAttribute描述信息性能改进的多种方法
一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显 ...
- 枚举Enum转换为List,获取枚举的描述
代码: public class EnumberHelper { public static List<EnumberEntity> EnumToList<T>() { Lis ...
- 获取枚举Name,Value,Description两种方法
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...
- C# 获取枚举的描述属性
在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述.通过反射,我们能获取到枚举类型的描述属性. 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Descripti ...
- C#获取枚举的描述
public enum StatusEnum { /// <summary> /// 运行中 /// </summary> [Description("运行中&quo ...
- C#获取枚举描述代码
public class MusterEnum { /// 获取枚举的描述信息 /// </summary> /// <param name="e">传入枚 ...
- c#枚举 获取枚举键值对、描述等
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.C ...
- .net工具类 获取枚举类型的描述
一般情况我们会用枚举类型来存储一些状态信息,而这些信息有时候需要在前端展示,所以需要展示中文注释描述. 为了方便获取这些信息,就封装了一个枚举扩展类. /// <summary> /// ...
- C#记录日志、获取枚举值 等通用函数列表
) { ] >= && ipvals[] <= && ipval ...
随机推荐
- 数据库之 MySQL --- 下载、安装 及 概述(一)
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一 . MySql数据库的安装 1.图解MySQL程序结构 2.双击运行安装程序:以Win32位为例 ...
- 使用turtle库绘制同心圆
import turtle as t t.pensize(3) t.setup(600,600,50,50) t.pencolor("yellow") t.penup() t.pe ...
- DDD之3实体和值对象
图中是一个别墅的模型,代表实体,可以真实的看得到.那么在DDD设计方法论中,实体和值对象是什么呢? 背景 实体和值对象是领域模型中的领域对象,是组成领域模型的基础单元,一起实现实体最基本的核心领域逻辑 ...
- Java实现 LeetCode 762 二进制表示中质数个计算置位(位运算+JDK的方法)
762. 二进制表示中质数个计算置位 给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数. (注意,计算置位代表二进制表示中1的个数.例如 21 的二进制表示 ...
- Java实现荷兰国旗问题
问题描述 现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右的球依次为红球.白球.蓝球.这个问题之所以叫荷兰国旗,是因为将红白蓝三色的小球弄成条状物,并有序排列后 ...
- 练习C++的vector语法-约瑟夫问题
//测试vector,约瑟夫问题 #include <iostream> #include <vector> using namespace std; int main() { ...
- java实现简单的oss存储
oss 工作中需要用到文件上传,之前使用的是本地文件系统存储方式,后来重构为支持多个存储源的方式,目前支持三种方式:local.seaweedfs.minio 存储介质 seaweedfs seawe ...
- blob斑点检测
目录 1. 可选算法 1.1. Laplacian of Gaussian (LoG) 1.2. Difference of Gaussian (DoG) 1.3. Determinant of He ...
- Redis系列(三):redisServer、redisDb、redisObject、sds四大结构体理解
一.源码下载: Windows中的Redis源码下载:https://github.com/microsoftarchive/redis/tree/3.2 根据官网说明可知,用VS2013编译,但是必 ...
- CentOS7.5搭建Hive2.3.3
一 Hive的下载 软件下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/ 这里下载的版本是:apache-hive-2.3.3-bin.t ...