在编程中,经常用到枚举enum,枚举成员的关联一组常量值为类型int,enum类型经常要查询判断是某一项。这个时候要将枚举转成集合,再进行查询。
/// <summary>
/// 枚举对应集合
/// </summary>
/// <typeparam name="T">枚举</typeparam>
public class EnumItem<T>
where T : Enum
{
public static readonly EnumItem<T> Default = new EnumItem<T>();
public T Value { get; set; }
public override string ToString()
{
return this.Value.GetDescription();
}
/// <summary>
/// 枚举转换成对应项的集合
/// </summary>
/// <returns></returns>
public static List<EnumItem<T>> CreateList()
{
var list = new List<EnumItem<T>>();
var fs = typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public);
foreach (var f in fs)
{
var val = f.GetValue(null);
list.Add(EnumItem<T>.CreateItem((T)val));
}
return list;
}
/// <summary>
/// 枚举转换成EnumItem
/// </summary>
/// <param name="em"></param>
/// <returns></returns>
public static EnumItem<T> CreateItem(T em)
{
return new EnumItem<T>() { Value = em };
}
}
public static string GetDescription(this Enum value)
{
var type = value.GetType();
var name = Enum.GetName(type, value);
if (string.IsNullOrWhiteSpace(name))
return value.ToString();
var field = type.GetField(name);
var des = field?.GetCustomAttribute<DescriptionAttribute>();
if (des == null)
return value.ToString();
return des.Description;
}
重写ToString方法获取枚举描述信息,枚举集合类定义好了,看一下实例代码如何调用:
this.ApplicationList = new ObservableCollection<EnumItem<enumBloodCodeType>>(EnumItem<enumBloodCodeType>.CreateList());
var items = this.ApplicationList.FirstOrDefault(p => p.Value == enumStep);
最后获取查询结果就好了。