using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace Bowin.Common.Utility
{
///
/// MemberInfo 的扩展
///
public static class MemberInfoExtension
{
///
/// 检测 MemberInfo 对象是否具有指定的自定义特性。
///
/// 自定义特性
/// MemberInfo 对象的实例。
///
public static bool HasAttribute(this MemberInfo memberInfo) where TAttribute : Attribute
{
//if (memberInfo == null) return false;
return HasAttribute(memberInfo, typeof(TAttribute));
}
///
/// 检测 MemberInfo 对象是否具有指定的自定义特性。
///
/// MemberInfo 对象的实例。
/// 自定义特性的类型集合。
///
public static bool HasAttribute(this MemberInfo memberInfo, params Type[] attributeTypes)
{
return memberInfo.GetAttribute(attributeTypes).Any();
}
///
/// 检测 MemberInfo 对象是否具有指定的自定义特性集合中的任意一项。
///
/// MemberInfo 对象的实例。
/// 自定义特性的类型集合。
///
public static bool HasAnyAttribute(this MemberInfo memberInfo, params Type[] attributeTypes)
{
return memberInfo.GetAttribute(attributeTypes).Any();
}
///
/// 检测 MemberInfo 对象是否具有指定的自定义特性集合的所有项。
///
/// MemberInfo 对象的实例。
/// 自定义特性的类型集合。
///
public static bool HasAllAttribute(this MemberInfo memberInfo, params Type[] attributeTypes)
{
return attributeTypes.All(attributeType => memberInfo.HasAttribute(attributeType));
}
///
/// 获取 MemberInfo 对象应用的自定义特性。
///
/// 自定义特性。
/// MemberInfo 对象的实例。
///
public static TAttribute GetAttribute(this MemberInfo memberInfo) where TAttribute : Attribute
{
if (memberInfo == null)
{
return null;
}
return (TAttribute)GetAttribute(memberInfo, typeof(TAttribute)).FirstOrDefault();
}
///
/// 获取 MemberInfo 对象应用的自定义特性
///
/// MemberInfo 对象的实例。
/// 自定义特性的类型集合。
///
public static IEnumerable GetAttribute(this MemberInfo memberInfo, params Type[] attributeTypes)
{
if (memberInfo == null)
{
return Enumerable.Empty();
}
var attributes = new HashSet