/// <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 PropertyInfo RetrieveMember(Type declaringType, string propertyName, bool nonPublic, bool?canWrite, bool?canRead) { if (null == declaringType) { throw new ArgumentNullException("declaringType"); } else if (string.IsNullOrEmpty(propertyName)) { throw new ArgumentNullException("propertyName"); } var _flag = (!nonPublic) ? BindingFlags.Public : BindingFlags.NonPublic; var _property = declaringType.GetProperty(propertyName, _flag | BindingFlags.Instance); if (null == _property) { throw new NullReferenceException(string.Format("The '{0}' property does not exist in {1}", propertyName, declaringType.FullName)); } if (!PropertyMemberHelpers.CheckAccessibility(_property, canWrite, canRead)) { throw new InvalidOperationException(string.Format("The '{0}' property cannot be reached", propertyName)); } return(_property); }
/// <summary> /// /// </summary> /// <param name="type"></param> /// <param name="canWrite"></param> /// <param name="canRead"></param> /// <returns></returns> public static PropertyInfo[] RetrieveMembers(Type type, bool?canWrite, bool?canRead) { if (null == type) { throw new ArgumentNullException("type"); } var _flag = BindingFlags.Public | BindingFlags.NonPublic; var _dummy = new ListCollection <PropertyInfo>(); var _properties = type.GetProperties(_flag | BindingFlags.Instance); foreach (var _property in _properties) { if (PropertyMemberHelpers.CheckAccessibility(_property, canWrite, canRead)) { _dummy.Add(_property); } } return(_dummy.ToArray()); }