Exemplo n.º 1
0
            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);
            }
Exemplo n.º 4
0
 public void Dispose()
 {
     _state = OurListEnumeratorState.FurtherEnumerationIsNotPossible;
     _enumerator?.Dispose();
 }
Exemplo n.º 5
0
 public OurEnumerator(OurListEnumeratorState state)
 {
     _state = state;
 }
 public SelectEnumerable(OurListEnumeratorState initState)
 {
     _state           = initState;
     _initialThreadId = Environment.CurrentManagedThreadId;
 }