C# .net 遍歷列舉和特性(Attribute)
阿新 • • 發佈:2022-06-06
現在我們有一個列舉,我需要獲取其列舉名稱、值、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> publicint 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的列表,我們就能通過這個列表拿到所有列舉值的所有資訊啦。