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); }
public BidirectionalIterator(LinkedListNode <T> start, IteratorDirection direction) { _enumerator = CreateEnumerator(start, direction).GetEnumerator(); _enumType = _enumerator.GetType(); }