/// <summary> /// Returns the original, backing member of an alias member if the member is an alias. /// </summary> /// <param name="memberInfo">The member to check.</param> /// /// <param name="throwOnNotAliased">if set to <c>true</c> an exception will be thrown if the member is not aliased.</param> /// <returns></returns> /// <exception cref="System.ArgumentException">The member was not aliased; this only occurs if throwOnNotAliased is true.</exception> public static MemberInfo DeAlias(this MemberInfo memberInfo, bool throwOnNotAliased = false) { MemberAliasFieldInfo aliasFieldInfo = memberInfo as MemberAliasFieldInfo; if (aliasFieldInfo != null) { return(aliasFieldInfo.AliasedField); } MemberAliasPropertyInfo aliasPropertyInfo = memberInfo as MemberAliasPropertyInfo; if (aliasPropertyInfo != null) { return(aliasPropertyInfo.AliasedProperty); } MemberAliasMethodInfo aliasMethodInfo = memberInfo as MemberAliasMethodInfo; if (aliasMethodInfo != null) { return(aliasMethodInfo.AliasedMethod); } if (throwOnNotAliased) { throw new ArgumentException("The member " + memberInfo.GetNiceName() + " was not aliased."); } return(memberInfo); }
/// <summary> /// Returns the original, backing property of an alias property if the property is an alias. /// </summary> /// <param name="propertyInfo">The property to check.</param> /// /// <param name="throwOnNotAliased">if set to <c>true</c> an exception will be thrown if the property is not aliased.</param> /// <returns></returns> /// <exception cref="System.ArgumentException">The property was not aliased; this only occurs if throwOnNotAliased is true.</exception> public static PropertyInfo DeAliasProperty(this PropertyInfo propertyInfo, bool throwOnNotAliased = false) { MemberAliasPropertyInfo aliasPropertyInfo = propertyInfo as MemberAliasPropertyInfo; if (aliasPropertyInfo != null) { while (aliasPropertyInfo.AliasedProperty is MemberAliasPropertyInfo) { aliasPropertyInfo = aliasPropertyInfo.AliasedProperty as MemberAliasPropertyInfo; } return(aliasPropertyInfo.AliasedProperty); } if (throwOnNotAliased) { throw new ArgumentException("The property " + propertyInfo.GetNiceName() + " was not aliased."); } return(propertyInfo); }