List<T>.GetEnumerator メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
List<T> を反復処理する列挙子を返します。
public:
System::Collections::Generic::List<T>::Enumerator GetEnumerator();
public System.Collections.Generic.List<T>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.List<'T>.Enumerator
Public Function GetEnumerator () As List(Of T).Enumerator
戻り値
注釈
C# 言語の foreach
ステートメント (C++ では for each
、Visual Basic では For Each
) では、列挙子の複雑さが隠されています。 したがって、列挙子を直接操作するのではなく、foreach
を使用することをお勧めします。
列挙子を使用すると、コレクション内のデータを読み取ることができますが、基になるコレクションを変更することはできません。
最初、列挙子はコレクションの先頭の要素の前に位置付けられます。 この位置では、Current プロパティは定義されていません。 そのため、Current の値を読み取る前に、MoveNext メソッドを呼び出し、列挙子をコレクションの最初の要素に進める必要があります。
プロパティは Current 、 が呼び出されるまで MoveNext 同じオブジェクトを返します。 MoveNext は、Current を次の要素に進めます。
MoveNext がコレクションの末尾を通過した場合、列挙子がコレクション内の最後の要素の後に配置され、MoveNext は false
を返します。 列挙子がこの位置にある場合、後続の MoveNext 呼び出しも false
を返します。 が返された false
Current の最後のMoveNext呼び出しが未定義の場合。 Current を、再度、コレクションの最初の要素に設定することはできません。列挙子の新しいインスタンスを作成する必要があります。
列挙子は、コレクションが変更されない限り有効です。 要素の追加、変更、削除など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、次に を呼び出すかIEnumerator.Reset、 InvalidOperationExceptionをMoveNextスローします。
列挙子はコレクションに排他アクセスできないため、コレクションの列挙処理は本質的にスレッド セーフな処理ではありません。 列挙処理でスレッド セーフを確保するには、列挙処理が終わるまでコレクションをロックできます。 コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。
System.Collections.Generic 名前空間のコレクションの既定の実装は同期されません。
このメソッドは、O(1) 操作です。
適用対象
こちらもご覧ください
.NET