5

C#コレクションのIEnumeratorの使用法がよくわかりません。それは何のために使用され、なぜそれが使用されるべきですか?

オンラインでhttp://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspxを調べてみまし たが、その記事はあまり意味がありません。私が尋ねる理由はUnity3dゲームエンジンにあり、yield関数と一緒に使用されます。IEnumeratorを使用する理由を理解しようとしています。

4

3 に答える 3

10

IEnumeratorインターフェースは、クラスによって実装されると、組み込みのforeach構文を使用して反復することができます。

IEnumeratorインターフェイスで繰り返す必要のあるクラスでは、オブジェクトのループを制御するGetEnumerator関数のメソッドシグネチャを定義します。

public IEnumerator<OrderLine> GetEnumerator()
    {
        for (int i=0;i<maxItems;i++) 
        {
            yield return item[i];
        }
    }

この例でわかるように、yieldステートメントを使用すると、列挙内での位置を失うことなく、呼び出し元に制御を戻すことができます。呼び出し元がforeachループの次の増分に到達すると、yieldステートメントの後に制御が行に戻されます。

于 2010-10-28T19:13:55.987 に答える
1

IEnumeratorを明示的に使用することはめったにありませんが、IEnumeratorと連携する拡張メソッドはたくさんありforeachます。すべてのコレクションがそれを実装しており、これはIteratorパターンの例です。

于 2010-10-28T19:16:26.923 に答える
1

これは、オブジェクトがコレクションを簡単に反復するための操作を実行できるようにする、非常に単純なインターフェイスです。これを使用して、foreach構文または類似の構文を使用してカスタムコレクションを反復処理するオブジェクトを作成できます。

于 2010-10-28T19:16:51.327 に答える