public Container VisitContainer(Container container) { var idx = 0; var photoSets = new PhotoSet[container.PhotoSets.Count()]; foreach (var visitor in Visitors) { container = visitor.VisitContainerBefore(container); } foreach (var photoSet in container.PhotoSets) { photoSets[idx++] = VisitPhotoSet(photoSet); } container = container.WithPhotoSets(photoSets); foreach (var visitor in Visitors) { container = visitor.VisitContainerAfter(container); } return container; }