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

 

調試過程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM