ホームページ >バックエンド開発 >C++ >C# の IEnumerable と IEnumerator: foreach ループとカスタム イテレータを有効にする方法

C# の IEnumerable と IEnumerator: foreach ループとカスタム イテレータを有効にする方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-09 12:51:41671ブラウズ

IEnumerable and IEnumerator in C#: How Do They Enable foreach Loops and Custom Iterators?

IEnumerable と IEnumerator についての深い理解: .NET イテレーターの中心的なメカニズム

.NET プログラミングでは、IEnumerable インターフェイスの実装が foreach ループを有効にする鍵となります。 foreach 構文は簡潔で使いやすいですが、その基礎となる依存関係は IEnumerable インターフェイスと IEnumerator インターフェイスにあります。

IEnumerable と IEnumerator のアプリケーション シナリオ

IEnumerable は foreach を「置き換える」ためには使用されません。逆に、IEnumerable の実装は foreach を使用するための前提条件です。 foreach ループを作成すると、コンパイラは実際にそれを IEnumerator の MoveNext メソッドと Current メソッドへの一連の呼び出しに変換します。

IEnumerable と IEnumerator の違い

  • IEnumerable: は、IEnumerator を返す GetEnumerator メソッドとのインターフェイスを定義します。
  • IEnumerator: は、MoveNext メソッドと Current メソッドのインターフェイスを定義します。 MoveNext は反復子をシーケンス内の次の項目に移動し、Current は現在の項目を返します。

IEnumerable と IEnumerator が必要なのはなぜですか?

  • カスタム イテレータ: カスタム クラスに IEnumerable を実装すると、foreach ループを使用してそれらのクラスを反復処理できます。
  • 反復子のメカニズムを理解する: IEnumerator は、コレクションを走査するための低レベルのメカニズムを提供し、走査プロセスを制御できるようにします。
  • ジェネリック コレクション: C# コンパイラは、IEnumerable と IEnumerator を使用して、List や Dictionary などのジェネリック コレクション クラスを作成します。
  • 非同期プログラミング: IEnumerator を非同期プログラミング モデルと組み合わせて使用​​すると、非同期シーケンスをトラバースできます。

は IEnumerable

を実装します

クラスを反復可能にするには、IEnumerable インターフェイスを実装する必要があります。これには、IEnumerator を返す GetEnumerator メソッドの実装が必要です。

IEnumerable インターフェイスを実装する次のカスタム オブジェクト クラスについて考えてみましょう:

<code class="language-csharp">public class CustomCollection : IEnumerable<int>
{
    private int[] data;

    public IEnumerator<int> GetEnumerator()
    {
        return new CustomEnumerator(data);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    private class CustomEnumerator : IEnumerator<int>
    {
        // MoveNext 和 Current 方法用于遍历 data
    }
}</code>

IEnumerable を実装し、カスタム列挙子を提供することにより、foreach ループを使用して CustomCollection のインスタンスを反復処理できるようになりました。

以上がC# の IEnumerable と IEnumerator: foreach ループとカスタム イテレータを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。