« Patrons de conception/Itérateur » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 36 :
 
<source lang=csharp>
class IterateurDeStringTypiqueIterateurTypique : IEnumerator {
 
private string[] _chainesAParcourir = new string[] { "TF1", "France2", "FR3", "Canal+" };
private int _positionCourante;
 
public void Reset() { _positionCourante = -1; }
_positionCourante = -1;
}
public bool MoveNext() {
if( _positionCourante + 1 >= _chainesAParcourir.Length )
return false;
 
Ligne 51 ⟶ 49 :
return true;
}
public void object Current { get { return _chainesAParcourir[_positionCourante]; } }
get { _chainesAParcourir[_positionCourante]; }
}
}
</source>
 
On utilisera alors l'iterateur ainsi pour afficheraccéder lesaux valeurs disponibles.
 
<source lang=csharp>
IterateurDeStringTypiqueIterateurTypique iterateur = new IterateurDeStringTypiqueIterateurTypique ();
iterateur.Reset();
Ligne 77 ⟶ 73 :
 
Un type dérivé de IEnumerable comme le sont les tableaux, listes, dictionnaires en C# possède une méthode GetEnumerator() qui appelle l'itérateur explicite. C'est cette méthode GetEnumerator qui est appelée par l'instruction foreach du C#, de manière à obtenir l'objet Current directement à chaque itération.
 
<source lang=csharp>
if(Television is IEnumerable) {
foreach(string chaine in Television) {
Console.WriteLine(chaine);
}
}
</source>
 
== Itérateurs implicites ==