c#枚举值增加特性说明(推荐)

通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。

自定义打印特性

[AttributeUsage(AttributeTargets.Field)]
public class EnumDisplayAttribute : Attribute
{
 public EnumDisplayAttribute(string displayStr)
 {
  Display = displayStr;
 }
 public string Display
 {
  get;
  private set;
 }
}

打印特性定义很简单,只含有一个字符串属性。

定义一个枚举

public enum TestEnum
{
 [EnumDisplay("一")]
 one,
 [EnumDisplay("二")]
 two,
 three
}

枚举类型one,two均增加了一个打印特性。

增加枚举扩展方法取得打印特性值

public static class TestEnumExtentions
{
 public static string Display(this TestEnum t)
 {
  var fieldName = Enum.GetName(typeof(TestEnum), t);
  var attributes = typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false);
  var enumDisplayAttribute = attributes.FirstOrDefault(p => p.GetType().Equals(typeof(EnumDisplayAttribute))) as EnumDisplayAttribute;
  return enumDisplayAttribute == null ? fieldName : enumDisplayAttribute.Display;
 }
}

获取枚举值对应的枚举filed字符串 var fieldName = Enum.GetName(typeof(TestEnum), t);

获取filed对应的所有自定义特性集合 var attributes = typeof(TestEnum).GetField(fieldName).GetCustomAttributes(false);

获取EnumDisplayAttribute特性 var enumDisplayAttribute = attributes.FirstOrDefault(p => p.GetType().Equals(typeof(EnumDisplayAttribute))) as EnumDisplayAttribute;

如存在EnumDisplayAttribute特性返回其Display值,否则返回filed字符串 return enumDisplayAttribute == null ? fieldName : enumDisplayAttribute.Display;

使用示例

class Program
{
 static void Main(string[] args)
 {
  TestEnum e = TestEnum.one;
  Console.WriteLine(e.Display());
  TestEnum e1 = TestEnum.three;
  Console.WriteLine(e1.Display());
  Console.ReadKey();
 }
}

输出:

一
three
扩展说明

此方法不仅可以给枚举类型增加说明特性,亦可给自定义类型的属性,方法增加自定义特性。。

在使用反射使GetField(string name) GetMethod(string name) GetProperty(string name)等均需要字符串

在获取自定义类型属性或方法名称字符串时可以使用 nameof

public class T
{
 public void Get()
 { }
 public int Num { get; set; }
}
T tt = new T();
Console.WriteLine(nameof(tt.Num));
Console.WriteLine(nameof(tt.Get));

以上所述是小编给大家介绍的c#枚举值增加特性说明(推荐),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • C#枚举数值与名称的转换实例分享

    首先建立一个枚举: 复制代码 代码如下: /// <summary>    /// 颜色    /// </summary>    public enum ColorType    {        /// <summary>        /// 红色         /// </summary>        Red, /// <summary>        /// 蓝色         /// </summary>      

  • C# 获取枚举值的简单实例

    先申明一个枚举: 复制代码 代码如下: public enum Test_Enum        {            one = 1001, two = 1002, three = 1003, four = 1004, five = 1005, six = 1006, seven = 1007, eight = 1008, nine = 1009, zero = 1000        } 获取值: 复制代码 代码如下: object ojb = Enum.GetName(typeof(T

  • C# 从枚举值获取对应的文本描述详解

    C# 从枚举值获取对应的文本描述详解 有时枚举值在显示时,需要显示枚举值对应的文本串.一种方案是在调用的地方使用switch或者if来判断枚举值,然后赋给不同的文本串,但这样一来,如果有较多的地方都用到的时候就会比较麻烦.当然有人说,这种情况下,可以针对这种枚举值封装一个方法,然后来调用.那如果有多个枚举类型都有这样的需求呢?有没有什么比较通用的解决办法?有的. 这里需要用到Description属性,给每个枚举值都赋上一个该属性,然后在该属性中赋上要描述的文本串.比如 #region YesN

  • c#枚举值增加特性说明(推荐)

    通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示. 自定义打印特性 [AttributeUsage(AttributeTargets.Field)] public class EnumDisplayAttribute : Attribute { public EnumDisplayAttribute(string displayStr) { Display = displayStr; } public string Display { get; private set; } } 打

  • C#如何给枚举类型增加一个描述特性详解

    前言 相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值.如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum==1) "我是一个枚举"或者switch(enum)这种方式解决. 枚举的优点: <1>枚举可以使代码更易于维护,有助于确保给变量指定合法的.期望的值. <2>枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示. <3>枚举使代码更

  • springboot validator枚举值校验功能实现

    这篇文章主要介绍了springboot validator枚举值校验功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.前言 在spring项目中,校验参数功能使用hibernate validator是一个不错的选择,我们的项目中也是使用它来进行校验的,省去了很多难看的校验逻辑,使代码的可读性也大大增加,本章将带你使用hibernate validator自定义注解功能实现一个 枚举值校验的逻辑. 二.需求 我们先明确下我们的需求,在

  • Typescript3.9 常用新特性一览(推荐)

    更新什么?概况一览 1.优化了 Promise.all 的定义,在 3.7 版本中一些混用 null 或 undefined 的时候的问题已经在 3.9 得到了修复. 2.大大的提高了打包速度,微软团队自测的时候 typescript项目的平均编译时间由 26s 缩短到了 10s 左右. 3.// @ts-expect-error 新注释的添加 4.在条件语句中检测未调用的函数 5.编辑器提升 5.1 在 JavaScript 中 CommonJS 的自动引入 5.2 在代码操作的时候正确的保留

  • JS两个数组比较,删除重复值的巧妙方法(推荐)

    偶尔需要我们比较两个数组,在一个数组中删除另一个数组存在的值.我们常常用的方法是循环比较判断并删除,最近看到另一个好方法巧妙删除的例子: var arr1 = ["i", "b", "c", "d", "e", "f","x"]; //数组A var arr2 = ["a", "b", "c", "

  • python3中确保枚举值代码分析

    有的小伙伴对于枚举的理解很模糊,其实我们可以把它看成一个数量的大管家,对其中的每一个数进行检查,保证里面的数字都没有重复的,这就是枚举的用法.相信听完小编的解释,小伙伴们已经可以结合理解了枚举的定义.今天我们主要教大家用代码来在python3中确保枚举值,具体的操作方法我们继续往下看. 创建 枚举语法与 class 语法相同,枚举的定义可以通过继承 Enum 的方式来实现, 看一下示例: from enum import Enum class WeekDay(Enum): Mon = 0 Tue

  • C/C++ int数与多枚举值互转的实现

    在C/C++在C/C++的开发中经常会遇到各种数据类型互转的情况,正常的互转有:单个枚举转int数,int数转float数,float数转double数等.但是我们有时也会遇到多个枚举值与数字互转的情形(例如多个算法类型枚举开启标志转成数字,这个数字来表示多个标志位,按位来表示).这样一个数字就能表示很多个标志位了,针对内存较少的嵌入式设备,这么操作可以达到节约内存消耗,提高程序运行效率的目的. Demo示例 demo核心知识点:通过位运算符(布尔位运算符:"~"."&

  • Spring MVC Controller传递枚举值的实例

    目录 Spring MVC Controller传递枚举值 功能描述 枚举定义 定义Controller类 请求示例 结论 Spring MVC 枚举传值问题 最后找到解决方案 Spring MVC Controller传递枚举值 功能描述 本文将通过一个小示例,展示在请求参数中传递枚举值. 枚举定义 角色类定义: public enum RoleEnum { EMPLOYEE((short)1, "Employee"), MANAGER((short)2, "Manager

  • c++11 实现枚举值到枚举名的转换问题

    目录 效果 关键技术 __VA_ARGS__ #__VA_ARGS__ 在函数外执行代码的能力 模板函数的静态变量 关键代码 源码地址 效果 ENUM_DEFINE ( Color, Red, Blue, ) EnumHelper(Color::Red) -> "Red" EnumHelper(Color::Red, std::toupper) -> "RED" 关键技术 __VA_ARGS__ __VA_ARGS__ 实现了可变参数的宏. #defin

随机推荐