Ejemplo n.º 1
0
        private IEnumerable <T> CreateEnumerator(LinkedListNode <T> start, IteratorDirection direction)
        {
            // Note: start и direction запоминаются в виде открытых полей итератора,
            // Note: созданного в yield-блоке
            LinkedListNode <T> current = null;

            do
            {
                if (current == null)
                {
                    current = start;
                }
                else
                {
                    current = direction == IteratorDirection.Forward ? current.Next : current.Previous;
                }
                if (current != null)
                {
                    yield return(current.Value);
                }
            }while (current != null);
        }
Ejemplo n.º 2
0
 public BidirectionalIterator(LinkedListNode <T> start, IteratorDirection direction)
 {
     _enumerator = CreateEnumerator(start, direction).GetEnumerator();
     _enumType   = _enumerator.GetType();
 }