C# Language
IEnumerable
Sök…
Introduktion
IEnumerable
är IEnumerable
för alla icke-generiska samlingar som ArrayList som kan räknas upp. IEnumerator<T>
är basgränssnittet för alla generiska teller som Lista <>.
IEnumerable
är ett gränssnitt som implementerar metoden GetEnumerator
. Metoden GetEnumerator
returnerar en IEnumerator
som ger alternativ för att iterera genom samlingen som förhand.
Anmärkningar
IEnumerable är basgränssnittet för alla icke-generiska samlingar som kan räknas upp
IEnumerable
I sin mest grundläggande form representerar ett objekt som implementerar IEnumerable en serie objekt. Objekten i fråga kan itereras med nyckelordet c # foreach
.
I exemplet nedan, objekt sequenceOfNumbers
implementerar IEnumerable. Det representerar en serie heltal. foreach
slingan itererar igenom var och en i tur och foreach
.
int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
int returnValue = 0;
foreach(int i in sequenceOfNumbers) {
returnValue += i;
}
return returnValue;
}
IEnumerable med anpassad Enumerator
Genom att implementera IEnumerable-gränssnittet kan klasser räknas upp på samma sätt som BCL-samlingar. Detta kräver utvidgning av klassen Enumerator som spårar uppräkningen.
Andra än att upprepa en standardsamling inkluderar exempel:
- Använda antal intervaller baserade på en funktion snarare än en samling av objekt
- Implementera olika iterationsalgoritmer över samlingar, som DFS eller BFS i en grafsamling
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;
}
}
}