using JiaZhiQuan.Common.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace JiaZhiQuan.Common.Utils
{
///
/// 特性工具类
///
public static class AttributeUtils
{
///
/// 获取枚举字段的特性
///
///
///
public static T GetEnumDescription(System.Enum value) where T : Attribute
{
var type = value.GetType();
var name = System.Enum.GetName(type, value);
if (name == null) return null;
var field = type.GetField(name);
if (field == null) return null;
return Attribute.GetCustomAttribute(field, typeof(T)) as T;
}
///
/// 获取枚举字段的特性
///
/// 枚举
/// 特性
///
///
public static List FindEnumValues(Func func)
where TEnum : System.Enum
where TAttribute : Attribute
{
List attributes = new List();
var fields = typeof(TEnum).GetFields(bindingAttr: BindingFlags.Public | BindingFlags.Static);
fields.ForEach(e =>
{
// 获取枚举字段的特性
var attribute = Attribute.GetCustomAttribute(e, typeof(TAttribute)) as TAttribute;
if (func(attribute))
{
attributes.Add(attribute);
}
});
return attributes;
}
}
}