Udostępnij za pośrednictwem


IEnumerator.Reset Metoda

Definicja

Ustawia moduł wyliczający na jego początkową pozycję, która znajduje się przed pierwszym elementem w kolekcji.

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.

Moduł wyliczający nie obsługuje resetowania.

Przykłady

Poniższy przykład kodu przedstawia implementację IEnumerator interfejsów dla kolekcji niestandardowej. W tym przykładzie Reset nie jest jawnie wywoływana, ale jest implementowana w celu obsługi użycia foreach (for each w Visual Basic). Ten przykład kodu jest częścią większego przykładu interfejsu 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

Uwagi

Jeśli zmiany są wprowadzane do kolekcji, takie jak dodawanie, modyfikowanie lub usuwanie elementów, zachowanie Reset elementu jest niezdefiniowane.

Metoda Reset jest dostarczana na potrzeby współdziałania modelu COM. Nie musi być zaimplementowana; Zamiast tego implementator może po prostu zgłosić element NotSupportedException.

Uwagi dotyczące implementowania

Wszystkie wywołania muszą spowodować Reset() ten sam stan dla modułu wyliczającego. Preferowaną implementacją jest przeniesienie modułu wyliczającego na początek kolekcji przed pierwszym elementem. Spowoduje to unieważnienie modułu wyliczającego, jeśli kolekcja została zmodyfikowana od momentu utworzenia modułu wyliczającego, który jest zgodny z elementami MoveNext() i Current.

Dotyczy

Zobacz też