IEnumerator.Reset Metoda

Definicja

Ustawia początkową pozycję modułu wyliczającego, która jest wcześniejsza niż pierwszy element w kolekcji.Sets the enumerator to its initial position, which is before the first element in the collection.

public:
 void Reset();
public void Reset ();
abstract member Reset : unit -> unit
Public Sub Reset ()

Wyjątki

Kolekcja została zmodyfikowana po utworzeniu modułu wyliczającego.The collection was modified after the enumerator was created.

Przykłady

Poniższy przykład kodu demonstruje implementację IEnumerator interfejsów dla kolekcji niestandardowej.The following code example demonstrates the implementation of the IEnumerator interfaces for a custom collection. W tym przykładzie Reset nie jest jawnie wywoływana, ale jest zaimplementowany do obsługi użycia foreach (for each w Visual Basic).In this example, Reset is not explicitly called, but it is implemented to support the use of foreach (for each in Visual Basic). Ten przykład kodu jest częścią większego przykładu dla interfejsu IEnumerator.This code example is part of a larger example for the IEnumerator interface.

// 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

Uwagi

Jeśli w kolekcji zostaną wprowadzone zmiany, takie jak dodawanie, modyfikowanie lub usuwanie elementów, zachowanie Reset jest niezdefiniowane.If changes are made to the collection, such as adding, modifying, or deleting elements, the behavior of Reset is undefined.

Metoda Reset jest udostępniana dla współdziałania modelu COM.The Reset method is provided for COM interoperability. Nie musi być zaimplementowana; Zamiast tego realizator może po prostu zgłosić NotSupportedException.It does not necessarily need to be implemented; instead, the implementer can simply throw a NotSupportedException.

Uwagi dotyczące implementowania

Wszystkie wywołania Reset() muszą mieć ten sam stan dla modułu wyliczającego.All calls to Reset() must result in the same state for the enumerator. Preferowana implementacja polega na przeniesieniu modułu wyliczającego na początek kolekcji przed pierwszym elementem.The preferred implementation is to move the enumerator to the beginning of the collection, before the first element. Powoduje to unieważnienie modułu wyliczającego, jeśli kolekcja została zmodyfikowana od czasu utworzenia modułu wyliczającego, który jest zgodny z MoveNext() i Current.This invalidates the enumerator if the collection has been modified since the enumerator was created, which is consistent with MoveNext() and Current.

Dotyczy

Zobacz też