IEnumerable vs IEnumerator

22 kart

Différences fondamentales entre IEnumerable et IEnumerator en C#

22 kart

Tekrar et
Aralıklı tekrar, her kartı uzun süreli hafızalamak için en uygun anda gösterir ve gitgide artan aralıklarla revizyonlar.
Soru
Que représente l'interface IEnumerable ?
Yanıt
Elle représente un groupe d'éléments et est l'interface parente de toutes les collections.
Soru
Quelle est la différence entre IEnumerable<T> et IEnumerable ?
Yanıt
IEnumerable<T> est la version générique et hérite de IEnumerable, qui est non générique.
Soru
De quelle interface IEnumerable<T> hérite-t-elle ?
Yanıt
L'interface générique IEnumerable<T> hérite de l'interface non-générique IEnumerable.
Soru
Quel est le but principal de l'interface IEnumerator ?
Yanıt
Elle est conçue pour la navigation séquentielle et en lecture seule à travers un groupe d'éléments.
Soru
Comment une boucle foreach utilise-t-elle IEnumerator en interne ?
Yanıt
La boucle foreach utilise IEnumerator pour parcourir la collection d'éléments.
Soru
Quelle méthode de l'interface IEnumerable retourne un IEnumerator ?
Yanıt
La méthode GetEnumerator() retourne une instance de IEnumerator.
Soru
Comment la méthode MoveNext() est-elle utilisée avec IEnumerator ?
Yanıt
La méthode MoveNext() lit l'élément suivant dans la collection.
Soru
Que retourne la propriété Current de l'interface IEnumerator ?
Yanıt
La propriété Current retourne l'élément actuel en fonction de la position courante.
Soru
Comment déclarer une variable de référence pour IEnumerable<T> ?
Yanıt
IEnumerable<T> ref = new List<T>();
Soru
Comment obtenir une référence IEnumerator<T> à partir d'une List<T> ?
Yanıt
IEnumerator<T> ref = new List<T>().GetEnumerator();
Soru
Quelle est l'interface parente de ICollection ?
Yanıt
L'interface IEnumerable est le parent de l'interface ICollection.
Soru
Que représente l'interface IEnumerable ?
Yanıt
Elle représente un groupe d'éléments et est l'interface parente de toutes les collections.
Soru
Quelle est la relation entre IEnumerable et ICollection ?
Yanıt
IEnumerable est l'interface parente de ICollection, qui est implémentée par des interfaces comme IList et IDictionary.
Soru
Comment déclarer une variable de type IEnumerable<T> générique ?
Yanıt
IEnumerable<T> referenceVariable = new List<T>();
Soru
Comment déclarer une variable de type IEnumerable non-générique ?
Yanıt
IEnumerable referenceVariable = new ArrayList();
Soru
À quoi sert l'interface IEnumerator ?
Yanıt
Elle est conçue pour la navigation séquentielle et en lecture seule à travers un groupe d'éléments.
Soru
Quelle construction C# utilise IEnumerator en interne ?
Yanıt
La boucle foreach utilise IEnumerator en interne pour parcourir une collection.
Soru
Quelle méthode de IEnumerable retourne un IEnumerator ?
Yanıt
La méthode GetEnumerator() retourne une instance de IEnumerator.
Soru
Quelle est la position initiale d'un IEnumerator ?
Yanıt
L'énumérateur est initialement positionné avant le premier élément. Il faut appeler MoveNext() pour lire le premier élément.
Soru
Que fait la méthode MoveNext() ?
Yanıt
La méthode MoveNext() fait avancer l'énumérateur à l'élément suivant de la collection.
Soru
Que retourne la propriété Current ?
Yanıt
La propriété Current retourne l'élément de la collection à la position actuelle de l'énumérateur.
Soru
Comment obtenir un IEnumerator<T> à partir d'une List<T> ?
Yanıt
IEnumerator<T> referenceVariable = new List<T>().GetEnumerator();

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éthode GetEnumerator() 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 renvoie true si un nouvel élément est disponible, false sinon.
  • 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 par MoveNext() qui avance le curseur, et Current qui 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 foreach utilise IEnumerable et IEnumerator en coulisses.
  • Les versions génériques (<T>) sont préférables pour la sécurité de type et la performance.

Bir quiz başla

Bilgini etkileşimli sorularla test et