Dictionary<TKey,TValue>.IEnumerable.GetEnumerator メソッド

定義

コレクションを反復処理する列挙子を返します。

 virtual System::Collections::IEnumerator ^ System.Collections.IEnumerable.GetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
override this.System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
Function GetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator

戻り値

コレクションを反復処理するために使用できる IEnumerator

実装

注釈

foreach C# 言語の ステートメント (for eachC++、Visual Basic では) は、For Each列挙子の複雑さを隠します。 したがって、列挙子を直接操作するのではなく、foreach を使用することをお勧めします。

列挙子を使用すると、コレクション内のデータを読み取ることができますが、基になるコレクションを変更することはできません。

最初、列挙子はコレクションの先頭の要素の前に位置付けられます。 Reset メソッドは、この位置に列挙子を戻します。 この位置では、Current プロパティは定義されていません。 そのため、Current の値を読み取る前に、MoveNext メソッドを呼び出し、列挙子をコレクションの最初の要素に進める必要があります。

プロパティはCurrent、 メソッドまたは Reset メソッドが呼び出されるまで同じ要素をMoveNext返します。 MoveNext は、Current を次の要素に進めます。

MoveNext がコレクションの末尾を通過した場合、列挙子がコレクション内の最後の要素の後に配置され、MoveNextfalse を返します。 列挙子がこの位置にある場合、後続の MoveNext 呼び出しも false を返します。 が返された falseCurrent の最後のMoveNext呼び出しが未定義の場合。 コレクションの先頭の要素に再び Current を設定するには、先に Reset を呼び出してから MoveNext を呼び出します。

列挙子は、コレクションが変更されない限り有効です。 要素の追加や容量の変更など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、次に を呼び出すかIEnumerator.Reset、 をMoveNextスローしますInvalidOperationException

.NET Core 3.0 以降のみ: 列挙子を無効にしない唯一の変更メソッドは と ClearですRemove

列挙子には、コレクションへの排他アクセスがありません。したがって、コレクションの列挙処理は本質的にスレッド セーフな処理ではありません。 列挙処理でスレッド セーフを確保するには、列挙処理が終わるまでコレクションをロックできます。 コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。

System.Collections.Generic 名前空間のコレクションの既定の実装は同期されません。

このメソッドは、O(1) 操作です。

適用対象

こちらもご覧ください