Similarly, output startObject and call recursively for each element in InnerObjects :
public static IEnumerable<TargetObject> GetRecursively(TargetObject startingObject) { yield return startingObject; if (startingObject.InnerObjects != null) foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray()) foreach (TargetObject recursiveInner in GetRecursively(innerObject)) yield return recursiveInner; }
To maintain an array as a parameter, wrap a foreach around it:
public static IEnumerable<TargetObject> GetRecursively2(params TargetObject[] startingObjects) { foreach (TargetObject startingObject in startingObjects) { yield return startingObject; if (startingObject.InnerObjects != null) foreach (TargetObject innerObject in startingObject.InnerObjects.ToArray()) foreach (TargetObject recursiveInner in GetRecursively(innerObject)) yield return recursiveInner; } }
source share