public bool MoveNext()
 {
     if (Current.Children.Count() > 0)
     {
         DepthFirstPreOrderTreeNodeWrapper <TNode> firstChild = null;
         DepthFirstPreOrderTreeNodeWrapper <TNode> prevNode   = null;
         foreach (TNode child in Current.Children)
         {
             var wrapper = new DepthFirstPreOrderTreeNodeWrapper <TNode> {
                 Node = child
             };
             if (prevNode != null)
             {
                 prevNode.Next = wrapper;
             }
             else
             {
                 firstChild = wrapper;
             }
             prevNode = wrapper;
         }
         prevNode.Next = _current.Next;
         _current      = firstChild;
     }
     else
     {
         _current = _current.Next;
     }
     return(_current != null);
 }
 public void Reset()
 {
     _current = _root;
 }
 public DepthFirstPreOrderTreeEnumerator(TNode root)
 {
     this._root = new DepthFirstPreOrderTreeNodeWrapper <TNode> {
         Node = root
     };
 }