ホームページ > バックエンド開発 > C++ > C# で `IEnumerable` と `IEnumerator` を使用すると、どのようにして効率的な反復が可能になりますか?

C# で `IEnumerable` と `IEnumerator` を使用すると、どのようにして効率的な反復が可能になりますか?

Patricia Arquette
リリース: 2025-01-09 12:33:40
オリジナル
1031 人が閲覧しました

How do `IEnumerable` and `IEnumerator` enable efficient iteration in C#?

C# の IEnumerableIEnumerator の深い理解: 効率的な反復のための強力なツール

ソフトウェア開発では、オブジェクト コレクションを効率的に反復することが重要です。 .NET Framework は、このための 2 つの主要なインターフェイス、IEnumerableIEnumerator を提供します。

IEnumerableインターフェース

IEnumerableインターフェイスはオブジェクトのコレクションを表します。 GetEnumerator() オブジェクトを返す単一のメソッド IEnumerator を定義します。要素の反復を許可するクラスであれば、このインターフェイスを実装できます。

IEnumeratorインターフェース

IEnumerator インターフェイスは列挙子を表します。列挙子は、オブジェクトのコレクションを反復処理するために使用できるオブジェクトです。 MoveNext()Current() という 2 つのメソッドが定義されています。 MoveNext() 列挙子をコレクション内の次の要素に進め、反復子がコレクションの最後に到達したかどうかを示すブール値を返します。 Current()コレクション内の現在の要素を返します。

IEnumerable および foreach ステートメントの使用法

IEnumerable は通常、C# の foreach ステートメントと組み合わせて使用​​されます。 foreach ステートメントは、オブジェクトのコレクションを反復処理するための簡潔で便利な方法を提供します。コンパイラは、コレクション オブジェクトの GetEnumerator() メソッドを自動的に呼び出し、結果の IEnumerator オブジェクトを使用してその要素を反復処理します。

IEnumerableIEnumerator を使用する理由

効率: IEnumerable および IEnumerator は、コレクション全体をメモリにロードすることを回避することで、効率的な反復を可能にします。これらは、コレクションの要素に 1 つずつアクセスするメカニズムを提供するため、メモリのオーバーヘッドが削減され、パフォーマンスが向上します。

拡張性: IEnumerable および IEnumerator は標準インターフェースであり、どのクラスでも実装できます。これにより、開発者は、内部実装に関係なく、一貫した方法で簡単に反復できるカスタム クラスを作成できます。

使用例

次の例を考えてみましょう:

<code class="language-csharp">using System;
using System.Collections.Generic;

public class MyCollection : IEnumerable<int>
{
    private List<int> _data = new List<int>();

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int item in _data)
        {
            yield return item;
        }
    }

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

    public void Add(int value)
    {
        _data.Add(value);
    }
}

public class Example
{
    public static void Main(string[] args)
    {
        MyCollection myCollection = new MyCollection();
        myCollection.Add(1);
        myCollection.Add(2);
        myCollection.Add(3);

        foreach (int item in myCollection)
        {
            Console.WriteLine(item);
        }
    }
}</code>
ログイン後にコピー

この例では、MyCollection クラスは IEnumerable<int> を実装し、その要素を反復するカスタム列挙子を定義します。 foreach ステートメントはコレクションを反復処理し、要素をコンソールに出力できるようになります。

以上がC# で `IEnumerable` と `IEnumerator` を使用すると、どのようにして効率的な反復が可能になりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート