IEnumerator.MoveNext Metodo

Definizione

Sposta l'enumeratore all'elemento successivo della raccolta.

public:
 bool MoveNext();
public bool MoveNext ();
abstract member MoveNext : unit -> bool
Public Function MoveNext () As Boolean

Restituisce

true se l'enumeratore è stato spostato correttamente in avanti in corrispondenza dell'elemento successivo, false se l'enumeratore ha superato la fine della raccolta.

Eccezioni

La raccolta è stata modificata dopo la creazione dell'enumeratore.

Esempio

Nell'esempio di codice seguente viene illustrata l'implementazione delle IEnumerator interfacce per una raccolta personalizzata. In questo esempio non MoveNext viene chiamato in modo esplicito, ma viene implementato per supportare l'uso di foreach (for each in Visual Basic). Questo esempio di codice fa parte di un esempio più grande per l'interfaccia IEnumerator .

// When you implement IEnumerable, you must also implement IEnumerator.
public class PeopleEnum : IEnumerator
{
    public Person[] _people;

    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public PeopleEnum(Person[] list)
    {
        _people = list;
    }

    public bool MoveNext()
    {
        position++;
        return (position < _people.Length);
    }

    public void Reset()
    {
        position = -1;
    }

    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    public Person Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}
' When you implement IEnumerable, you must also implement IEnumerator.
Public Class PeopleEnum
    Implements IEnumerator

    Public _people() As Person

    ' Enumerators are positioned before the first element
    ' until the first MoveNext() call.
    Dim position As Integer = -1

    Public Sub New(ByVal list() As Person)
        _people = list
    End Sub

    Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
        position = position + 1
        Return (position < _people.Length)
    End Function

    Public Sub Reset() Implements IEnumerator.Reset
        position = -1
    End Sub

    Public ReadOnly Property Current() As Object Implements IEnumerator.Current
        Get
            Try
                Return _people(position)
            Catch ex As IndexOutOfRangeException
                Throw New InvalidOperationException()
            End Try
        End Get
    End Property
End Class

Commenti

Dopo aver creato un enumeratore o una volta chiamato il Reset metodo, un enumeratore viene posizionato prima del primo elemento della raccolta e la prima chiamata al MoveNext metodo sposta l'enumeratore sul primo elemento della raccolta.

Se MoveNext passa la fine della raccolta, l'enumeratore viene posizionato dopo l'ultimo elemento della raccolta e MoveNext restituisce false. Quando l'enumeratore si trova in questa posizione, le chiamate successive per restituire false anche fino a MoveNext quando Reset non viene chiamato.

Se le modifiche vengono apportate alla raccolta, ad esempio l'aggiunta, la modifica o l'eliminazione di elementi, il comportamento di MoveNext è indefinito.

Si applica a

Vedi anche