次の方法で共有


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

定義

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

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

戻り値

SortedDictionary<TKey,TValue>.EnumeratorSortedDictionary<TKey,TValue>

注釈

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

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

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

ディクショナリは、内部ツリーを使用して並べ替えられた順序で保持されます。 新しい要素はすべて正しい並べ替え位置に配置され、要素が削除されるたびに並べ替え順序を維持するようにツリーが調整されます。 列挙中は、並べ替え順序が維持されます。

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

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

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

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

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

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

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

適用対象

こちらもご覧ください