bool IEnumerator.MoveNext() { try { switch (_state) { case 0: _state = OurListEnumeratorState.FurtherEnumerationIsNotPossible; _enumerator = Parent._list.GetEnumerator(); _state = OurListEnumeratorState.ParentEnumeratorCreated; break; case OurListEnumeratorState.AwaitingNextMove: _state = OurListEnumeratorState.ParentEnumeratorCreated; break; default: return(false); } if (_enumerator.MoveNext()) { _current = _enumerator.Current; _state = OurListEnumeratorState.AwaitingNextMove; return(true); } Dispose(); _enumerator = null; return(false); } finally { Dispose(); } }
bool IEnumerator.MoveNext() { // ISSUE: fault handler try { switch (_state) { case OurListEnumeratorState.EnumeratorCreated: _state = OurListEnumeratorState.FurtherEnumerationIsNotPossible; _enumerator = _list.GetEnumerator(); _state = OurListEnumeratorState.ParentEnumeratorCreated; break; case OurListEnumeratorState.AwaitingNextMove: _state = OurListEnumeratorState.ParentEnumeratorCreated; break; default: return(false); } if (_enumerator.MoveNext()) { _current = _getValue(_enumerator.Current); _state = OurListEnumeratorState.AwaitingNextMove; return(true); } Dispose(); _enumerator = (IEnumerator <TElement>)null; return(false); } finally { Dispose(); } }
public IEnumerator <TResult> GetEnumerator() { SelectEnumerable <TElement, TResult> enumerator; if (_state == OurListEnumeratorState.EnumeratorNotCreated && _initialThreadId == Environment.CurrentManagedThreadId) { _state = OurListEnumeratorState.EnumeratorCreated; enumerator = this; } else { enumerator = new SelectEnumerable <TElement, TResult>(OurListEnumeratorState.EnumeratorCreated); } enumerator._list = List; enumerator._getValue = GeValue; return(enumerator); }
public void Dispose() { _state = OurListEnumeratorState.FurtherEnumerationIsNotPossible; _enumerator?.Dispose(); }
public OurEnumerator(OurListEnumeratorState state) { _state = state; }
public SelectEnumerable(OurListEnumeratorState initState) { _state = initState; _initialThreadId = Environment.CurrentManagedThreadId; }