欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2021-06-29 08:27:51|栏目:.NET代码|点击:

前言

相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值。如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上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# 死锁和活锁的发生及避免

栏    目:.NET代码

下一篇:C#用ComboBox控件实现省与市的联动效果的方法

本文标题:C#如何给枚举类型增加一个描述特性详解

本文地址:http://www.codeinn.net/misctech/149871.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有