C# の IEnumerable
と IEnumerator
の深い理解: 効率的な反復のための強力なツール
ソフトウェア開発では、オブジェクト コレクションを効率的に反復することが重要です。 .NET Framework は、このための 2 つの主要なインターフェイス、IEnumerable
と IEnumerator
を提供します。
IEnumerable
インターフェース
IEnumerable
インターフェイスはオブジェクトのコレクションを表します。 GetEnumerator()
オブジェクトを返す単一のメソッド IEnumerator
を定義します。要素の反復を許可するクラスであれば、このインターフェイスを実装できます。
IEnumerator
インターフェース
IEnumerator
インターフェイスは列挙子を表します。列挙子は、オブジェクトのコレクションを反復処理するために使用できるオブジェクトです。 MoveNext()
と Current()
という 2 つのメソッドが定義されています。 MoveNext()
列挙子をコレクション内の次の要素に進め、反復子がコレクションの最後に到達したかどうかを示すブール値を返します。 Current()
コレクション内の現在の要素を返します。
IEnumerable
および foreach
ステートメントの使用法
IEnumerable
は通常、C# の foreach
ステートメントと組み合わせて使用されます。 foreach
ステートメントは、オブジェクトのコレクションを反復処理するための簡潔で便利な方法を提供します。コンパイラは、コレクション オブジェクトの GetEnumerator()
メソッドを自動的に呼び出し、結果の IEnumerator
オブジェクトを使用してその要素を反復処理します。
IEnumerable
と IEnumerator
を使用する理由
効率: 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 サイトの他の関連記事を参照してください。