public void RefreshCacheTypesRecursive() { Stack <IEnumerator <GameComponent> > eStack = new Stack <IEnumerator <GameComponent> >(); eStack.Push(Children.GetEnumerator()); while (eStack.Count > 0) { IEnumerator <GameComponent> e = eStack.Pop(); while (e.MoveNext()) { GameComponent current = e.Current; current.RefreshCacheTypes(); if (current.Children.Count > 0) { eStack.Push(e); e = current.Children.GetEnumerator(); } } } }