zoukankan      html  css  js  c++  java
  • C# 给枚举类型增加一个描述特性

    前言

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

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

    开整

    先定义一个枚举类

      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());//获取枚举特性值

    调试过程

  • 相关阅读:
    des加密
    http请求报错
    js生成二维码(jquery自带)
    tomcat跨域请求
    jsp读取properties文件
    spring+mybatis整合读取不了配置文件
    svn提交报e200007错误
    firefox兼容性问题
    Oracle学习笔记(2)
    Spring设置定时器:quartz
  • 原文地址:https://www.cnblogs.com/zhangxiaoyong/p/7452408.html
Copyright © 2011-2022 走看看