public static void IfHasAttribute <TAttribute>(this MemberInfo memberInfo, Action <TAttribute> action) where TAttribute : Attribute { memberInfo.AssertNotNull(nameof(memberInfo)); action.AssertParameterNotNull(nameof(action)); foreach (var attr in memberInfo.GetCustomAttributes <TAttribute>(true)) { action(attr); } }
public static Type GetFieldOrPropertyType(this MemberInfo member) { member.AssertNotNull(); if (member is FieldInfo) { return(((FieldInfo)member).FieldType); } if (member is PropertyInfo) { return(((PropertyInfo)member).PropertyType); } throw new Exception($"{nameof(member)} must be either {nameof(FieldInfo)} or {nameof(PropertyInfo)}!"); }
public static object GetFieldOrPropertyValue(this MemberInfo member, object obj) { member.AssertNotNull(); if (member is FieldInfo) { return(((FieldInfo)member).GetValue(obj)); } if (member is PropertyInfo) { return(((PropertyInfo)member).GetValue(obj)); } throw new Exception($"{nameof(member)} must be either {nameof(FieldInfo)} or {nameof(PropertyInfo)}!"); }
public static void IfHasSingleAttribute <TAttribute>(this MemberInfo memberInfo, Action <TAttribute> action) where TAttribute : Attribute { memberInfo.AssertNotNull(nameof(memberInfo)); action.AssertParameterNotNull(nameof(action)); var attributes = memberInfo.GetCustomAttributes <TAttribute>(true); if (attributes.Count() == 1) { action(attributes.Single()); } else if (attributes.Count() > 1) { throw new InvalidOperationException($"Error : Member {memberInfo.Name} has multiple attributes of the following type."); } }
public static Visibility Visibility(this MemberInfo mi) { mi.AssertNotNull(); if (mi is Type) { var t = mi.AssertCast <Type>(); if (t.IsNested) { if (t.IsNestedPublic) { return(Reflection.Visibility.Public); } if (t.IsNestedFamORAssem) { return(Reflection.Visibility.FamilyOrAssembly); } if (t.IsNestedFamily) { return(Reflection.Visibility.Family); } if (t.IsNestedAssembly) { return(Reflection.Visibility.Assembly); } if (t.IsNestedFamANDAssem) { return(Reflection.Visibility.FamilyAndAssembly); } if (t.IsNestedPrivate) { return(Reflection.Visibility.Private); } throw AssertionHelper.Fail(); } else { if (t.IsPublic) { return(Reflection.Visibility.Public); } return(Reflection.Visibility.Assembly); } } else if (mi is FieldInfo) { var fi = mi.AssertCast <FieldInfo>(); if (fi.IsPublic) { return(Reflection.Visibility.Public); } if (fi.IsFamilyOrAssembly) { return(Reflection.Visibility.FamilyOrAssembly); } if (fi.IsFamily) { return(Reflection.Visibility.Family); } if (fi.IsAssembly) { return(Reflection.Visibility.Assembly); } if (fi.IsFamilyAndAssembly) { return(Reflection.Visibility.FamilyAndAssembly); } if (fi.IsPrivate) { return(Reflection.Visibility.Private); } throw AssertionHelper.Fail(); } else if (mi is MethodBase) { var mb = mi.AssertCast <MethodBase>(); if (mb.IsPublic) { return(Reflection.Visibility.Public); } if (mb.IsFamilyOrAssembly) { return(Reflection.Visibility.FamilyOrAssembly); } if (mb.IsFamily) { return(Reflection.Visibility.Family); } if (mb.IsAssembly) { return(Reflection.Visibility.Assembly); } if (mb.IsFamilyAndAssembly) { return(Reflection.Visibility.FamilyAndAssembly); } if (mb.IsPrivate) { return(Reflection.Visibility.Private); } throw AssertionHelper.Fail(); } else if (mi is PropertyInfo) { var pi = mi.AssertCast <PropertyInfo>(); var getter = pi.CanRead ? null : pi.GetGetMethod(true); var setter = pi.CanRead ? null : pi.GetGetMethod(true); if (getter == null || setter == null) { throw AssertionHelper.Fail(); } else if (getter == null || setter == null) { return((getter ?? setter).Visibility()); } else { var g_vis = getter.Visibility(); var s_vis = setter.Visibility(); return((Visibility)Math.Max((int)g_vis, (int)s_vis)); } } else { throw AssertionHelper.Fail(); } }
public static bool HasAttribute <TAttribute>(this MemberInfo memberInfo) where TAttribute : Attribute { memberInfo.AssertNotNull(nameof(memberInfo)); return(memberInfo.GetCustomAttributes <TAttribute>(true).Any()); }