IEnumerable vs IEnumerator
22 tarjetasDifférences fondamentales entre IEnumerable et IEnumerator en C#
22 tarjetas
L'interface IEnumerable représente un groupe d'éléments et est l'interface parente de tous les types de collections. Elle est la base de l'interface ICollection, qui à son tour est implémentée par d'autres interfaces comme IList et IDictionary.
Interfaces IEnumerable
Il existe deux principales versions de l'interface IEnumerable : une version générique et une version non générique.
System.Collections.Generic.IEnumerable<T>
- C'est la version générique de l'interface, qui permet de spécifier le type des éléments de la collection, offrant ainsi une sécurité de type.
- Définition :
public interface IEnumerable<out T> : IEnumerable { IEnumerator<T> GetEnumerator(); } - Elle hérite de l'interface non générique
System.Collections.IEnumerable. - Exemple de déclaration :
IEnumerable<T> referenceVariable = new List<T>();
System.Collections.IEnumerable
- C'est la version non générique de l'interface, qui ne spécifie pas le type des éléments, rendant les collections moins sûres au niveau du type et nécessitant souvent des casts explicites.
- Définition :
public interface IEnumerable { IEnumerator GetEnumerator(); } - Exemple de déclaration :
IEnumerable referenceVariable = new ArrayList();
Interface IEnumerator
L'interface IEnumerator est conçue pour la navigation en lecture seule et séquentielle des groupes d'éléments.Elle est utilisée en interne par la boucle foreach.
Fonctionnalités Clés
- Navigation séquentielle : Permet de parcourir les éléments un par un dans l'ordre.
- Lecture seule : Ne permet pas lamodification de la collection sous-jacente.
- Méthode
GetEnumerator(): L'interface IEnumerable possède une méthodeGetEnumerator()qui renvoie une instance de IEnumerator. - Positionnement initial : L'énumérateur commence par défaut avant le premier élément.
- Méthode
MoveNext(): Lit l'élément suivant dans la collection. Elle renvoietruesi un nouvel élément est disponible,falsesinon. - Propriété
Current: Retourne l'élément actuel basé sur la position courante de l'énumérateur.
Comparaison des versions génériques et non génériques de IEnumerator
System.Collections.Generic.IEnumerator<T> | System.Collections.IEnumerator |
Sécurité de type, spécifie le type T des éléments. |
Moins de sécurité de type, gère des objets de type object. |
Exemple : IEnumerator<T> referenceVariable = new List<T>().GetEnumerator(); |
Exemple : IEnumerator referenceVariable = new ArrayList().GetEnumerator(); |
Illustrations Conceptuelles
Le processus de navigation avec IEnumerator peut être visualisé comme un curseur se déplaçant à travers une liste d'éléments, accédant à un élément à la fois.
Une image conceptuelle montre souvent
GetEnumerator()initialisant l'énumérateur, suivi parMoveNext()qui avance le curseur, etCurrentqui pointe vers l'élément sélectionné.
Points Clés à Retenir
- IEnumerable définit"ce qui peut être énuméré".
- IEnumerator définit "comment l'énumération est effectuée".
- La boucle
foreachutilise IEnumerable et IEnumerator en coulisses. - Les versions génériques (
<T>) sont préférables pour la sécurité de type et la performance.
Empezar cuestionario
Prueba tus conocimientos con preguntas interactivas