Performance of nested yield in a tree
You can improve performance if you unroll recurse to stack, so you will have only one iterator: public IEnumerable<Foo> GetAll() { Stack<Foo> FooStack = new Stack<Foo>(); FooStack.Push(this); while (FooStack.Count > 0) { Foo Result = FooStack.Pop(); yield return Result; foreach (Foo NextFoo in Result.MyChildren) FooStack.Push(NextFoo); } }