1. 程式人生 > 其它 >C# .net 遍歷列舉和特性(Attribute)

C# .net 遍歷列舉和特性(Attribute)

現在我們有一個列舉,我需要獲取其列舉名稱、值、Description,那麼我們可以參照如下操作:

列舉:

/// <summary>
    /// 崗位審批狀態
    /// </summary>
    public enum PostApproveStatus : int
    {
        /// <summary>
        /// 待稽核
        /// </summary>
        [Description("待稽核")]
        Wait = 0,
        /// <summary>
        /// 稽核通過
        
/// </summary> [Description("稽核通過")] Success = 1, /// <summary> /// 稽核駁回 /// </summary> [Description("稽核駁回")] Fail = 2 }

再來個獲取所有資訊的model

public class EnumInfo
    {
        /// <summary>
        /// 列舉值
        /// </summary>
        public
int Value { get; set; } /// <summary> /// 列舉名 /// </summary> public string Name { get; set; } /// <summary> /// 特性 /// </summary> public string Description { get; set; } }

遍歷列舉

/// <summary>
        /// 獲取所有列舉
        /// </summary>
/// <param name="type"></param> /// <returns></returns> public static List<EnumInfo> GetAllEnums(this Type type) { var result = new List<EnumInfo>(); if (type.IsEnum) { var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public) ?? new FieldInfo[] { }; foreach (var field in fields) { var info = new EnumInfo(); info.Name = field.Name; info.Value = (int)field.GetValue(null); var atts = field.GetCustomAttributes(typeof(DescriptionAttribute), false); info.Description = atts != null && atts.Length > 0 ? ((DescriptionAttribute[])atts)[0].Description : string.Empty; result.Add(info); } } return result; }

呼叫方法:

var enumList = typeof(PostApproveStatus).GetAllEnums();

這時我們拿到的enumList就是一個EnumInfo的列表,我們就能通過這個列表拿到所有列舉值的所有資訊啦。