C# Language
IEnumerable
サーチ…
前書き
IEnumerable
は、列挙できるArrayListのような非ジェネリックコレクションの基本インターフェイスです。 IEnumerator<T>
はList <>のようなすべての汎用列挙子の基本インターフェイスです。
IEnumerable
は、メソッドGetEnumerator
を実装するインターフェイスGetEnumerator
。 GetEnumerator
メソッドは、foreachのようなコレクションを反復処理するオプションを提供するIEnumerator
を返します。
備考
IEnumerableは、列挙できるすべての非ジェネリックコレクションの基本インターフェイスです。
IEnumerable
最も基本的な形式では、IEnumerableを実装するオブジェクトは一連のオブジェクトを表します。問題のオブジェクトは、c# foreach
キーワードを使用して反復することができます。
以下の例では、オブジェクトsequenceOfNumbers
はIEnumerableを実装しています。一連の整数を表します。 foreach
ループは、それぞれを順番に繰り返します。
int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
int returnValue = 0;
foreach(int i in sequenceOfNumbers) {
returnValue += i;
}
return returnValue;
}
カスタム列挙子でIEnumerable
IEnumerableインターフェイスを実装すると、BCLコレクションと同じ方法でクラスを列挙できます。これには、列挙の状態を追跡するEnumeratorクラスを拡張する必要があります。
標準的なコレクションを反復する以外にも、次のような例があります。
- オブジェクトの集合ではなく関数に基づく数値の範囲を使う
- グラフコレクションのDFSやBFSなど、コレクションに異なる反復アルゴリズムを実装する
public static void Main(string[] args) {
foreach (var coffee in new CoffeeCollection()) {
Console.WriteLine(coffee);
}
}
public class CoffeeCollection : IEnumerable {
private CoffeeEnumerator enumerator;
public CoffeeCollection() {
enumerator = new CoffeeEnumerator();
}
public IEnumerator GetEnumerator() {
return enumerator;
}
public class CoffeeEnumerator : IEnumerator {
string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
int currentIndex = -1;
public object Current {
get {
return beverages[currentIndex];
}
}
public bool MoveNext() {
currentIndex++;
if (currentIndex < beverages.Length) {
return true;
}
return false;
}
public void Reset() {
currentIndex = 0;
}
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow