先定义一个类来存储数据:
public class ItemInfo{
public int ID {get;set;}
public string Name {get;set;}
public string Description {get;set;}
}
要获取的枚举如下:
public enum MyEnum{
[Description("测试枚举1")]
TestEnum=1;
[Description("测试枚举2")]
TestEnum=2;
[Description("测试枚举3")]
TestEnum=3;
}
循环获取的代码如下:
//反射 循环 获取数据
List<ItemInfo> itemList = new List<ItemInfo>();
Type t = typeof(MyEnum);
FieldInfo[] fieldInfos= t.GetFields();
foreach(var item in fieldInfos){
//不是枚举字段不处理
if (item.FieldType.IsEnum){
//名称可以直接获取
ItemInfo itemInfo=new ItemInfo(){
Name=item.Name
};
//获取值
itemInfo.ID = (int)t.InvokeMember(item.Name, BindingFlags.GetField, null, null, null);
//获取注解
Type typeDescription = typeof(DescriptionAttribute);
DescriptionAttribute arr = item.GetCustomAttributes(typeDescription, true).FirstOrDefault() as DescriptionAttribute;
itemInfo.Description = arr?.Description ?? "";
itemList.Add(itemInfo);
}
}
完整代码:
public class Program
{
public static void Main(string[] args)
{
//根据枚举值获取单个枚举的Description
string test = CommonEnumTool.GetEnumDescriptionFromValue<EnumSubOrderState>(EnumSubOrderState.isTry);
Console.WriteLine("test===" + test);
//获取枚举列表
List<EnumItemInfo> list = CommonEnumTool.GetListFromEnum<EnumSubOrderState>();
foreach (var item in list)
{
Console.WriteLine(item.ID + "||" + item.Name + "||" + item.Description);
}
Console.ReadLine();
}
}
public enum EnumSubOrderState
{
[Description("无")]
none = 0,
[Description("尝试")]
isTry = 1,
[Description("附带")]
attachment = 2,
[Description("保持器")]
retainer = 3
}
[Serializable]
public class EnumItemInfo
{
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class CommonEnumTool
{
/// <summary>
/// 根据枚举值类型获取枚举信息List
/// </summary>
/// <returns></returns>
public static List<EnumItemInfo> GetListFromEnum<T>()
{
//反射 循环 获取数据
Type t = typeof(T);
List<EnumItemInfo> itemList = new List<EnumItemInfo>();
FieldInfo[] fieldInfos = t.GetFields();
foreach (var item in fieldInfos)
{
//不是枚举字段不处理
if (item.FieldType.IsEnum)
{
//名称可以直接获取
EnumItemInfo itemInfo = new EnumItemInfo()
{
Name = item.Name
};
//获取值
itemInfo.ID = (int)t.InvokeMember(item.Name, BindingFlags.GetField, null, null, null);
//获取注解
Type typeDescription = typeof(DescriptionAttribute);
DescriptionAttribute arr = item.GetCustomAttributes(typeDescription, true).FirstOrDefault() as DescriptionAttribute;
itemInfo.Description = arr?.Description ?? "";
itemList.Add(itemInfo);
}
}
return itemList;
}
/// <summary>
/// 根据枚举值获取枚举Description
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="val"></param>
/// <returns></returns>
public static string GetEnumDescriptionFromValue<T>(T val)
{
Type t = typeof(T);
MemberInfo[] field = t.GetMember(val.ToString());
object[] attrs =field?.FirstOrDefault().GetCustomAttributes(typeof(DescriptionAttribute), true);
string description = ((DescriptionAttribute)attrs.FirstOrDefault()).Description;
return description;
}
}