C#可以通过反射,来获取枚举的描述信息或通过描述信息获取到指定类型的枚举

 /// <summary>
/// 获取枚举描述
/// </summary>
/// <param name="enumName"></param>
/// <returns></returns>
public static string GetDescription(this Enum enumName)
{
string description;
FieldInfo fieldInfo = enumName.GetType().GetField(enumName.ToString());
DescriptionAttribute[] attributes = fieldInfo.GetDescriptAttr();
if (attributes != null && attributes.Length > )
description = attributes[].Description;
else
throw new ArgumentException($"{enumName} 未能找到对应的枚举描述.", nameof(enumName));
return description;
} /// <summary>
/// 获取枚举描述属性
/// </summary>
/// <param name="fieldInfo"></param>
/// <returns></returns>
private static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
{
return (DescriptionAttribute[])fieldInfo?.GetCustomAttributes(typeof(DescriptionAttribute), false);
} /// <summary>
/// 通过描述获取枚举值
/// </summary>
/// <typeparam name="TEnum"></typeparam>
/// <param name="description"></param>
/// <returns></returns>
public static TEnum GetEnum<TEnum>(string description)
{
Type type = typeof(TEnum);
foreach (FieldInfo field in type.GetFields())
{
DescriptionAttribute[] curDesc = field.GetDescriptAttr();
if (curDesc != null && curDesc.Length > )
{
if (curDesc[].Description == description)
return (TEnum)field.GetValue(null);
}
else
{
if (field.Name == description)
return (TEnum)field.GetValue(null);
}
}
throw new ArgumentException($"{description} 未能找到对应的枚举.", nameof(description));
}

C#通过反射进行枚举描述相关操作的更多相关文章

  1. C#实现枚举的相关操作

    枚举中的Descript()描述值,以及枚举值是一种一一对应的关系.我们可以获取其描述值和枚举值,存放到字典中, 在实际的使用中我们就可以轻松的根据枚举值来获取其描述值,也可以通过枚举的描述值来获取其 ...

  2. 转 sqlserver字段描述相关操作sql

    可以自己查询系统表: SELECT o.name AS tableName, c.name AS columnName, p.[value] AS Description FROM sysproper ...

  3. 乐字节Java反射之四:反射相关操作

    大家好,乐字节小乐继续为Java初学者讲述Java基础知识.上次说到乐字节Java反射之三:方法.数组.类加载器,这次是Java反射之四:反射相关操作 1.操作属性 //1.获取Class对象 Cla ...

  4. 从零自学Hadoop(21):HBase数据模型相关操作下

    阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 ...

  5. linux下进程相关操作

    一.定义和理解 狭义定义:进程是正在运行的程序的实例. 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动. 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的 ...

  6. 【转】Reflector、reflexil、De4Dot、IL相关操作指令合集

    PS:CTRL+F 输入你需要的内容,可以快速查找页面上的内容. 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. ...

  7. 数据结构Java实现04---树及其相关操作

    首先什么是树结构? 树是一种描述非线性层次关系的数据结构,树是n个数据结点的集合,这些集结点包含一个根节点,根节点下有着互相不交叉的子集合,这些子集合便是根节点的子树. 树的特点 在一个树结构中,有且 ...

  8. C#路径的八种相关操作,判断字符串是否为路径等

    原文:C#路径的八种相关操作,判断字符串是否为路径等 1.判定一个给定的C#路径是否有效,合法 通过Path.GetInvalidPathChars或Path.GetInvalidFileNameCh ...

  9. 关于C#资源文件的相关操作

    关于资源文件的相关操作. //1.比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 //比较典型的做法是通过代码程序集加载指定资源 //如下通过Assembly的静态方法GetExecut ...

随机推荐

  1. web前端代码编写体验

    最好是使用HTML5的有意义的标签,并尝试在不同的,老版本的浏览器中也保持一致,不然你会发现,满屏都是div,后期进行代码验证,修改和查找简直是一场大灾难. 而且,编写代码的时候,为了方便以后代码的复 ...

  2. js中getBoundingClientRect的作用及兼容方案

    js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...

  3. vba单元格背景色

    cells(i,j).interior.color=5287936  green =255 red

  4. 【思路】-URL重写

    URL重写  重写原理 过程分析 疑惑地方 lookfor app.Request.ApplicationPath如果有子目录的话 这个地方可能会起到作用,暂时不确定 bool flag = url. ...

  5. 第一篇博客:Hello World

    2016年10月10日,双十,好日子,决定开始写第一篇博客,标题想了会,就叫Hello World 吧,哈哈^_^. 首先感谢博客园的管理们能批准我的申请,记得在14年的时候申请过一次,竟然没申请通过 ...

  6. 如何更方便地调试javascript代码

    开发者工具 现在一般的浏览器都内置了开发者工具,快捷键F12可以打开,如Chrome浏览器下,Sources面板下找到对应的js文件 这是首选方法,但是对于SPA程序(比如easyui),可能找不到内 ...

  7. sphinx全文检索功能 | windows下测试 (一)

    前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在* ...

  8. Nuget包之间的依赖

    为什么我们使用依赖呢??原因是某些资源是基于某些资源的基础上才可以运行的,比如bootstrap基于Jquery,EntityFramework.zh-Hans基于EntityFramework,如果 ...

  9. yii2.0 Activeform表单部分组件使用方法

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  10. 金山软件wps2012-2013通杀0day

    #!/usr/bin/python # Exploit Title: Kingsoft Office Writer v2012 8.1.0.3385 .wps Buffer Overflow Expl ...