C# Language
IEnumerable
Zoeken…
Invoering
IEnumerable
is de basisinterface voor alle niet-generieke collecties zoals ArrayList die kunnen worden opgesomd. IEnumerator<T>
is de basisinterface voor alle generieke enumerators zoals List <>.
IEnumerable
is een interface die de methode GetEnumerator
. De methode GetEnumerator
retourneert een IEnumerator
die opties biedt om de verzameling te doorlopen zoals foreach.
Opmerkingen
IEnumerable is de basisinterface voor alle niet-generieke collecties die kunnen worden opgesomd
IEnumerable
In zijn meest basale vorm vertegenwoordigt een object dat IEnumerable implementeert een reeks objecten. De objecten in kwestie kunnen worden herhaald met behulp van het trefwoord c # foreach
.
In het onderstaande voorbeeld implementeert het object sequenceOfNumbers
IEnumerable. Het vertegenwoordigt een reeks gehele getallen. De foreach
lus doorloopt elke beurt om de beurt.
int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
int returnValue = 0;
foreach(int i in sequenceOfNumbers) {
returnValue += i;
}
return returnValue;
}
IEantal met aangepaste Enumerator
Door de IEnumerable-interface te implementeren, kunnen klassen op dezelfde manier worden opgesomd als BCL-collecties. Dit vereist het uitbreiden van de Enumerator-klasse die de status van de opsomming volgt.
Naast het herhalen van een standaardcollectie, zijn voorbeelden:
- Getallenreeksen gebruiken op basis van een functie in plaats van een verzameling objecten
- Implementeren van verschillende iteratie-algoritmen over collecties, zoals DFS of BFS in een grafiekcollectie
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;
}
}
}