当前位置: 首页 > 编程笔记 >

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

广绪
2023-03-14
本文向大家介绍C#如何给枚举类型增加一个描述特性详解,包括了C#如何给枚举类型增加一个描述特性详解的使用技巧和注意事项,需要的朋友参考一下

前言

相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值。如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum==1) “我是一个枚举”或者switch(enum)这种方式解决。

枚举的优点:

<1>枚举可以使代码更易于维护,有助于确保给变量指定合法的、期望的值。

<2>枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。

<3>枚举使代码更易于键入。在给枚举类型的实例赋值时,VS.NET IDE会通过IntelliSense弹出一个包含可接受值的列表框,减少了按键次数,并能够让我们回忆起可能的值

那今天我们就来介绍一种更优雅的解决方法

开整

先定义一个枚举类

  enum StatusEnum
 {
  [Description("修改")]
  Update = 1,
  [Description("新增")]
  Insert = 2,
  [Description("删除")]
  Delete = 3
 }

Description是属性特性的意思。记住即可

大家要记住,所有的特性类必须继承自 Attribute,所以,我们自定义一个特性类

/// <summary>
 /// 备注特性
 /// </summary>
 public class RemarkAttribute : Attribute
 {
  /// <summary>
  /// 备注
  /// </summary>
  public string Remark { get; set; }

  public RemarkAttribute(string remark)
  {
   this.Remark = remark;
  }
 }

有了这个特性类之后呢,我们还需要一个枚举扩展类

 /// <summary>
 /// 枚举扩展类
 /// </summary>
 public static class EnumExtension
 {
  /// <summary>
  /// 获取枚举的备注信息
  /// </summary>
  /// <param name="em"></param>
  /// <returns></returns>
  public static string GetRemark(this Enum value)
  {
   FieldInfo fi = value.GetType().GetField(value.ToString());
   if (fi == null)
   {
    return value.ToString();
   }
   object[] attributes = fi.GetCustomAttributes(typeof(RemarkAttribute), false);
   if (attributes.Length > 0)
   {
    return ((RemarkAttribute)attributes[0]).Remark;
   }
   else
   {
    return value.ToString();
   }
  }

  public static string GetEnumDescription(this Enum value)
  {
   FieldInfo fi = value.GetType().GetField(value.ToString());
   DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
   if (attributes.Length > 0)
   {
    return attributes[0].Description;
   }
   else
   {
    return value.ToString();
   }
  }
 }

需要引入命名空间:

using System.Collections.Generic;
using System.ComponentModel;

有了这个枚举扩展类,我们就可以直接使用了

 Console.WriteLine((int)StatusEnum.Insert);//输出原有枚举值
 Console.WriteLine(StatusEnum.Insert.GetRemark());//获取枚举备注信息
 Console.WriteLine(StatusEnum.Insert.GetEnumDescription());//获取枚举特性值

 

调试过程

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍C#如何获取枚举的描述属性详解,包括了C#如何获取枚举的描述属性详解的使用技巧和注意事项,需要的朋友参考一下 前言 枚举为我看日常开发的可读性提供的非常好的支持,但是有时在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述。通过反射,我们能获取到枚举类型的描述属性。 首先我们需要给枚举类型添加描述属性(属性都没有是不可能取到的),[Description]就是描述属

  • 本文向大家介绍C#中如何为枚举类型添加描述方法【小技巧】,包括了C#中如何为枚举类型添加描述方法【小技巧】的使用技巧和注意事项,需要的朋友参考一下 背景 在我们的日常开发中,我们会经常使用枚举类型。枚举类型(enum type)是具有一组命名常量的独特的值类型。在以下示例中: 声明一个名为 Color 的枚举类型,该类型具有三个成员:Red、Green 和 Blue。 枚举具体是怎么声明呢?枚举声

  • 本文向大家介绍c#枚举值增加特性说明(推荐),包括了c#枚举值增加特性说明(推荐)的使用技巧和注意事项,需要的朋友参考一下 通过特性给一个枚举类型每个值增加一个字符串说明,用于打印或显示。 自定义打印特性 打印特性定义很简单,只含有一个字符串属性。 定义一个枚举 枚举类型one,two均增加了一个打印特性。 增加枚举扩展方法取得打印特性值 获取枚举值对应的枚举filed字符串 var fieldN

  • 本文向大家介绍C#中枚举的特性 FlagAttribute详解,包括了C#中枚举的特性 FlagAttribute详解的使用技巧和注意事项,需要的朋友参考一下 写在前面 枚举Enum 全称(Enumeration),即一种由一组称为枚举数列表的命名常量组成的独特类型。可以看出枚举的出现时为了使我们可以在程序中方便的使用一些特定值的常量,一般的使用大家都比较熟悉,本文主要介绍枚举的特性 FlagAt

  • 本文向大家介绍C#中可枚举类型详解,包括了C#中可枚举类型详解的使用技巧和注意事项,需要的朋友参考一下 枚举是迭代一个集合中的数据项的过程。 我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键和值...

  • 枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型中成员的默认值是从 0 开始的,然后逐一递增。 在 C# 中可以使用 enum 关键字来声明枚举类型,语法格式如下所示: enum enum_name{     enumeration list; } 其中,enum_n