IEnumerator.MoveNext IEnumerator.MoveNext IEnumerator.MoveNext IEnumerator.MoveNext Method

定義

列挙子をコレクションの次の要素に進めます。Advances the enumerator to the next element of the collection.

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

戻り値

列挙子が次の要素に正常に進んだ場合は true。列挙子がコレクションの末尾を越えた場合は falsetrue if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.

例外

コレクションは、列挙子の作成後に変更されました。The collection was modified after the enumerator was created.

次のコード例の実装を示します、IEnumeratorカスタム コレクション用のインターフェイス。The following code example demonstrates the implementation of the IEnumerator interfaces for a custom collection. この例でMoveNext明示的に呼び出されないの使用をサポートするために実装されますが、 foreach (for each Visual Basic で)。In this example, MoveNext is not explicitly called, but it is implemented to support the use of foreach (for each in Visual Basic). このコード例の例の一部、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

注釈

列挙子を作成した後、または後に、Resetメソッドが呼び出されると、列挙子がコレクション、および最初の呼び出しの最初の要素の前に配置されている、MoveNextメソッドが、列挙子をコレクションの最初の要素の移動にします。After an enumerator is created or after the Reset method is called, an enumerator is positioned before the first element of the collection, and the first call to the MoveNext method moves the enumerator over the first element of the collection.

場合MoveNext列挙子、コレクションの末尾がコレクション内の最後の要素の後に配置されているパスとMoveNext返しますfalseします。If MoveNext passes the end of the collection, the enumerator is positioned after the last element in the collection and MoveNext returns false. この位置では、後続の呼び出しで列挙子の場合MoveNextを返すこともfalseまでResetが呼び出されます。When the enumerator is at this position, subsequent calls to MoveNext also return false until Reset is called.

追加、変更、または、要素の動作を削除するなど、コレクションに変更が加えられた場合MoveNextが定義されていません。If changes are made to the collection, such as adding, modifying, or deleting elements, the behavior of MoveNext is undefined.

適用対象

こちらもご覧ください