/// <summary>
        ///
        /// </summary>
        /// <typeparam name="TDescriptor"></typeparam>
        /// <param name="instance"></param>
        /// <param name="nonPublic"></param>
        /// <param name="attributeType"></param>
        /// <param name="inherit"></param>
        /// <param name="canWrite"></param>
        /// <param name="canRead"></param>
        /// <returns></returns>
        public static TDescriptor RetrieveMemberDescriptor <TDescriptor>(object instance, bool nonPublic, Type attributeType, bool inherit, bool?canWrite, bool?canRead)
            where TDescriptor : MemberDescriptor
        {
            if (null == instance)
            {
                throw new ArgumentNullException("instance");
            }

            return(PropertyMemberHelpers.RetrieveMemberDescriptor <TDescriptor>(instance.GetType(), nonPublic, attributeType, inherit, canWrite, canRead));
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="instance"></param>
 /// <param name="nonPublic"></param>
 /// <param name="attributeType"></param>
 /// <param name="inherit"></param>
 /// <param name="canWrite"></param>
 /// <param name="canRead"></param>
 /// <returns></returns>
 public static PropertyMemberDescriptor RetrieveMemberDescriptor(object instance, bool nonPublic, Type attributeType, bool inherit, bool?canWrite, bool?canRead)
 {
     return(PropertyMemberHelpers.RetrieveMemberDescriptor <PropertyMemberDescriptor>(instance, nonPublic, attributeType, inherit, canWrite, canRead));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="instance"></param>
 /// <param name="propertyName"></param>
 /// <param name="nonPublic"></param>
 /// <param name="canWrite"></param>
 /// <param name="canRead"></param>
 /// <returns></returns>
 public static PropertyMemberDescriptor RetrieveMemberDescriptor(object instance, string propertyName, bool nonPublic, bool?canWrite, bool?canRead)
 {
     return(PropertyMemberHelpers.RetrieveMemberDescriptor <PropertyMemberDescriptor>(instance, propertyName, nonPublic, canWrite, canRead));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="declaringType"></param>
 /// <param name="propertyName"></param>
 /// <param name="nonPublic"></param>
 /// <param name="canWrite"></param>
 /// <param name="canRead"></param>
 /// <returns></returns>
 public static PropertyMemberDescriptor RetrieveMemberDescriptor(Type declaringType, string propertyName, bool nonPublic, bool?canWrite, bool?canRead)
 {
     return(PropertyMemberHelpers.RetrieveMemberDescriptor <PropertyMemberDescriptor>(declaringType, propertyName, nonPublic, canWrite, canRead));
 }