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 ...
随机推荐
- Java并发编程 (十) 多线程并发拓展
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.死锁 1.死锁的定义 所谓的死锁是指两个或两个以上的线程在等待执行的过程中,因为竞争资源而造成的一种 ...
- (Java实现) 洛谷 P1042 乒乓球
题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华就是其中一位,他 ...
- Java实现 LeetCode 673 最长递增子序列的个数(递推)
673. 最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, ...
- Java实现 蓝桥杯 算法训练 Anagrams问题
算法训练 Anagrams问题 时间限制:1.0s 内存限制:512.0MB 问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相 ...
- Java实现统计方案
统计方案 题目描述 在一无限大的二维平面中,我们做如下假设: 1.每次只能移动一格: 2.不能向后走(假设你的目的地是"向上",那么你可以向左走,可以向右走,也可以向上走,但是不可 ...
- Java实现 蓝桥杯VIP 算法提高 change
算法提高 change 时间限制:1.0s 内存限制:256.0MB 问题描述 数组A中共有n个元素,初始全为0.你可以对数组进行两种操作:1.将数组中的一个元素加1:2.将数组中所有元素乘2.求将数 ...
- SQL Server账号密码(sa)登录失败 错误原因:233
(其实以前经常用的时候,都很简单,最近一段时间不用了,再一看发现都忘记的差不多了,还是写一篇博客吧,防止下一次再在这种问题上面浪费时间) 右键此电脑,点击管理 如果没有此电脑打开文件夹 在这里右键也是 ...
- tensorflow2.0学习笔记第二章第二节
2.2复杂度和学习率 指数衰减学习率可以先用较大的学习率,快速得到较优解,然后逐步减少学习率,使得模型在训练后期稳定指数衰减学习率 = 初始学习率 * 学习率衰减率^(当前轮数/多少轮衰减一次) 空间 ...
- 实验四 Linux系统搭建C语言编程环境
项目 内容 这个作业属于那个课程 <班级课程的主页链接> 这个作业的要求在哪里 <作业要求链接地址> 学号-姓名 17043220-万文文 作业学习目标 1).Linux系统下 ...
- monkey命令的基本使用
看到monkey,你想到了什么?今天给大家分享下monkey命令的基本使用 monkey测试是Android平台自动化测试的一种手段,通过monkey程序模拟用户触摸屏幕,滑动.按键操作等操作对设备上 ...