英語で読む

次の方法で共有


HashSet<T>.Enumerator 構造体

定義

HashSet<T> オブジェクトの要素を列挙します。

public struct HashSet<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
[System.Serializable]
public struct HashSet<T>.Enumerator : System.Collections.Generic.IEnumerator<T>

型パラメーター

T
継承
HashSet<T>.Enumerator
属性
実装

注釈

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 名前空間のコレクションの既定の実装は同期されません。

プロパティ

Current

列挙子の現在位置の要素を取得します。

メソッド

Dispose()

HashSet<T>.Enumerator オブジェクトによって使用されているすべてのリソースを解放します。

MoveNext()

列挙子を HashSet<T> コレクションの次の要素に進めます。

明示的なインターフェイスの実装

IEnumerator.Current

列挙子の現在位置の要素を取得します。

IEnumerator.Reset()

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

適用対象

製品 バージョン
.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 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.6, 2.0, 2.1
UWP 10.0