IEnumerator.Reset メソッド

定義

列挙子を最初の位置 (コレクション内の最初の要素の前) に設定します。

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

例外

列挙子の作成後にコレクションが変更されました。

列挙子はリセットをサポートしていません。

次のコード例は、カスタム コレクションの IEnumerator インターフェイスの実装を示しています。 この例では、 Reset は明示的に呼び出されませんが、 foreach の使用をサポートするように実装されています (Visual Basic のfor each )。 このコード例は、 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

注釈

要素の追加、変更、削除など、コレクションに変更が加えられた場合、 Reset の動作は未定義です。

Resetメソッドは、COM の相互運用性のために提供されています。 必ずしも実装する必要はありません。代わりに、実装者は単に NotSupportedExceptionをスローできます。

注意 (実装者)

Reset()のすべての呼び出しは、列挙子に対して同じ状態にする必要があります。 推奨される実装は、列挙子をコレクションの先頭 (最初の要素の前) に移動することです。 これにより、列挙子の作成後にコレクションが変更された場合に列挙子が無効になります。これは、 MoveNext() および Currentと一致します。

適用対象

こちらもご覧ください