質問

繰り返し不可能なIEnumerableクラスはありますか?

繰り返し不可能というのは、GetEnumeratorを複数回安全に呼び出すことができない場所、またはGetEnumeratorを呼び出すと目に見える副作用がある場所を意味します。

役に立ちましたか?

解決

File.ReadLines()は、一度しか機能しないIEnumerable<T>を返します。

他のヒント

IEnumerable(Of T)の実装では、何らかの理由で適切と思われる項目を返すことができます。アイテムの同じシーケンスでGetEnumeratorを2回呼び出してから、両方の列挙子を循環させた場合、同じ順序で同じアイテムを生成するか、例外をスローすることが十分に予想されます。 IEnumerable(Of T)を受け入れる多くのルーチンがあり、そのような契約に従わないルーチンが指定された場合、ひどく失敗します。

もし私が自分の娘を持っているなら、IEnumerableはインターフェイスのファミリーに分割されていたでしょう。基本的なIEnumerableの列挙子はResetメソッドを失い、再現性の特定の見込みを伝えません。新しいIMultiEnumerableは、Resetメソッドで列挙子を返し、複数のパスで同一のデータが生成されることを保証します。列挙子は独自のGetEnumeratorメソッドもサポートする場合があります(マルチパス列挙をサポートできるすべての型に実用的であると考えます。唯一のコストは「開始」ポインタであるため、ネストされた列挙子は元の場所にリセットされます作成)。

いいえ、IEnumerableを実装する適切に動作するクラスは列挙の繰り返しを許可します。

繰り返し不可能なコレクションを列挙するには、GetEnumeratorを実装するクラスはありません。代わりに、列挙子を返すメソッドがあります。そうすれば、クラスではなく列挙子がコレクションを保持するため、同じコレクションに対してEnumerable.Rangeを2回呼び出すことはできません。列挙子を繰り返すには、メソッドを呼び出して新しいコレクションを作成する必要があります。

この例は、<=>メソッドです。範囲のアイテムをその場で作成するため、その範囲はコレクションとして存在せず、繰り返し不可能になります。同じ範囲を再度列挙するには、メソッドを呼び出して同じ範囲の新しい範囲を作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top