Un itérateur est une méthode qui permet d’utiliser un “foreach in” sur une classe. Jusqu’à maintenant, vous utilisiez le foreach in sur des collections. Exemple:

foreach(ListViewItem lvi in maListView.Items)
{
}

Vous ne pouviez donc travaillez que sur des objets de type Collection. C’est toujours le cas maintenant mais l’appel à ces collections se fait par l’appel à la classe parente de celles-ci. Prenons comme exemple, la classe Personne qui permet de contenir le nom et les différents prénoms d’une personne.

public class Personne
{
public string _Nom = “Morand”;
string[] _Prenoms = { “Louis-Guillaume”, “Charles”, “Aurélien”};
public System.Collections.IEnumerator GetEnumerator()
{
foreach (string prenom in _Prenoms)
yield return prenom;
}
}

// utilisation de l’itérateur
// instanciation de la classe Personne
Personne p = new Personne();

// itération à travers le foreach
foreach (string prenom in p)
{
Console.WriteLine(prenom);
}

Le mot-clé yield sert à retourner implicitement le type de l’objet retourné.

D’après la MSDN, les itérateurs ont les propriétés suivantes:
- une itérateur est une section de code retournant une suite ordonnée de valeurs
- un itérateur utilise le statement yield return pour renvoyer une valeur
- un itérateur peut être utilisé dans le corps d’une méthode ou dans un accesseur
- le type retourné par un itérateur doit être System.Collections.IEnumerable, System.Collections.IEnumerator ou l’un des itérateurs génériques

Source : developpez.com