예제 #1
0
        public virtual TResult Accept(IPropertyWalkerVisitor <TResult, TWalkInfo> visitor, TWalkInfo walkInfo)
        {
            walkInfo.WalkedTypes.Add(walkInfo.Type);

            var fieldFirstParts = GetFirstPartsFromFields(walkInfo.Fields);
            var properties      = GetProperties(walkInfo, fieldFirstParts);

            if (!walkInfo.Fields.Contains("*"))
            {
                walkInfo.Fields = walkInfo.Fields.Except(fieldFirstParts);
            }

            walkInfo.RelatedDataLevel--;

            foreach (var property in properties)
            {
                WalkIntoProperty(visitor, property, walkInfo);
            }

            return(visitor.Output(walkInfo));
        }