C#でコレクションを反復処理するには、イテレータを使用する方法は何ですか。
C#では、イテレータを使用してコレクションを走査することができます。イテレータは、コレクション内の要素に順番にアクセスすることを可能にする特別なメソッドですが、コレクションの内部実装の詳細を公開する必要はありません。
集合をイテレータで反復処理する手順は以下の通りです。
- 集合クラス内に、GetEnumerator() という名前のメソッドを実装し、IEnumerableインターフェースを実装したイテレーターオブジェクトを返すのが一般的です。
- イテレータオブジェクト内では、yieldキーワードを使用してコレクションの要素を返します。yieldキーワードは、現在のメソッドをイテレータに変換し、ループイテレーションごとに要素を返すことができるようにします。
- コレクション内の要素を反復処理するために、呼び出し元のコードでforeachループを使用します。
整数の集合をイテレーターで走査する方法を示す簡単な例を以下に示します。
using System;
using System.Collections;
using System.Collections.Generic;
public class MyCollection : IEnumerable<int>
{
private List<int> list = new List<int>();
public MyCollection()
{
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
}
public IEnumerator<int> GetEnumerator()
{
foreach (int i in list)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
class Program
{
static void Main()
{
MyCollection collection = new MyCollection();
foreach (int i in collection)
{
Console.WriteLine(i);
}
}
}
この例では、MyCollectionクラスがIEnumerableインターフェースを実装し、GetEnumerator()メソッドでyieldキーワードを使用して整数コレクションの要素を返します。Mainメソッドでは、foreachループを使用してMyCollectionオブジェクトを反復処理し、各整数要素を出力します。