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

定義

Dictionary<TKey,TValue> を反復処理する列挙子を返します。

public:
 System::Collections::Generic::Dictionary<TKey, TValue>::Enumerator GetEnumerator();
public System.Collections.Generic.Dictionary<TKey,TValue>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.Dictionary<'Key, 'Value>.Enumerator
Public Function GetEnumerator () As Dictionary(Of TKey, TValue).Enumerator

戻り値

Dictionary<TKey,TValue>Dictionary<TKey,TValue>.Enumerator 構造体。

注釈

列挙の目的上、各項目は KeyValuePair<TKey,TValue> 値とそのキーを表す構造体です。

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

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

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

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

MoveNext がコレクションの末尾を通過した場合、列挙子がコレクション内の最後の要素の後に配置され、MoveNextfalse を返します。 列挙子がこの位置にある場合、後続の MoveNext 呼び出しも false を返します。 が返された falseCurrent の最後のMoveNext呼び出しが未定義の場合。 Current を、再度、コレクションの最初の要素に設定することはできません。列挙子の新しいインスタンスを作成する必要があります。

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

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

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

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

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

適用対象

こちらもご覧ください