private static void GetChildPrivateProperties(IList <PropertyInfo> initialProperties, Type targetType, BindingFlags bindingAttr) { if ((bindingAttr & BindingFlags.NonPublic) == BindingFlags.Default) { return; } BindingFlags bindingAttr1 = ReflectionUtils.RemoveFlag(bindingAttr, BindingFlags.Public); while ((targetType = TypeExtensions.BaseType(targetType)) != null) { foreach (PropertyInfo propertyInfo in targetType.GetProperties(bindingAttr1)) { PropertyInfo nonPublicProperty = propertyInfo; int index = CollectionUtils.IndexOf <PropertyInfo>((IEnumerable <PropertyInfo>)initialProperties, (Func <PropertyInfo, bool>)(p => p.Name == nonPublicProperty.Name)); if (index == -1) { initialProperties.Add(nonPublicProperty); } else { initialProperties[index] = nonPublicProperty; } } } }