英語で読む

次の方法で共有


IEnumerator.Reset メソッド

定義

列挙子を初期位置、つまりコレクションの最初の要素の前に設定します。

C#
public void Reset ();

例外

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

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

次のコード例は、カスタム コレクションのインターフェイスの IEnumerator 実装を示しています。 この例では、 Reset は明示的に呼び出されませんが、 (Visual Basic では)for eachforeach使用をサポートするために実装されています。 このコード例は、 インターフェイスの大きな例の IEnumerator 一部です。

C#
// 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();
            }
        }
    }
}

注釈

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

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

注意 (実装者)

Reset() を呼び出した結果は、列挙子にとって常に同じ状態になる必要があります。 列挙子をコレクションの先頭、つまり先頭の要素の前に移動するような実装を推奨します。 そうすると、列挙子の作成後にコレクションが変更されていた場合は列挙子が無効になり、MoveNext() および Current との一貫性が保たれます。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください