private void WalkIntoProperty(IPropertyWalkerVisitor <TResult, TWalkInfo> visitor, PropertyInfo property, TWalkInfo walkInfo) { var fieldsWithPropertyPrefix = new List <string>(); var propertyWalkInfoFields = walkInfo.Fields.Contains("*") ? new List <string> { "*" } : RemovePropertyPrefixFromFields(fieldsWithPropertyPrefix = GetFieldsWithPropertyPrefix(walkInfo.Fields, property.Name).ToList(), property.Name); visitor.Visit(property, BuildWalkInfoForProperty(walkInfo, propertyWalkInfoFields)); walkInfo.Fields = walkInfo.Fields.Except(fieldsWithPropertyPrefix, StringComparer.OrdinalIgnoreCase); }