Différence entre IEnumerable et IEnumerator

Avant de passer à la différence entre IEnumerable et IEnumerator, comprenons d’abord les termes Enumerator et Enumerable et décrivez quand et pourquoi les utiliser..

Enumerable est un module utilisé dans la classe Array qui vous donne Enumerator. La classe elle-même ne fait pas chaque méthode. En fait, il utilise une méthode appelée 'GetEnumerator' qui vous donne un énumérateur pour récupérer son élément.

Un énumérateur est un objet qui renvoie chaque élément d'une collection dans un ordre spécifique, exactement tel qu'il est demandé. Le compilateur génère un code qui utilise un énumérateur lorsque vous écrivez une boucle foreach en C #..

IEnumerator est une interface implémentée par un énumérateur et la classe énumérable implémente l'interface IEnumerable..

Quel est Ienumerable?

IEnumerable est une interface basique utilisée pour obtenir un objet sachant énumérer (ou itérer) les éléments de la collection..

C'est une implémentation du modèle d'itérateur qui fournit un mécanisme pour parcourir un objet de la collection, quelle que soit sa structure interne. L’interface IEnumerable représente un objet pouvant être itéré dans une collection..

Il utilise une seule méthode “GetEnumerator” qui renvoie une instance de classe d'énumérateur qui implémente l'interface IEnumerator..

Qu'est-ce que Ienumerator?

De son côté, l'interface IEnumerator déclare deux méthodes - Reset () et MoveNext () - et une propriété, Current. MoveNext () renvoie une valeur booléenne qui indique la fin de la liste et permet de positionner le premier élément de la liste après avoir appelé la méthode Reset (). Il définit l'énumérateur sur sa position par défaut afin de pouvoir répéter la liste à partir de la liste. début.

La propriété Current ne peut être appelée que via une instance de l'interface IEnumerator et renvoie l'élément en cours dans la liste..

Différence entre IEnumerable et IEnumerator

Notions de base sur IEnumerable et Ienumerator

IEnumerable et IEnumerator sont des interfaces qui implémentent ensemble le modèle de conception de logiciel itérateur. .Net Framework permet d’accéder à des éléments individuels de la collection personnalisée lors de l’implémentation des interfaces IEnumerable et IEnumerator. L'interface IEnumerable déclare une seule méthode appelée GetEnumerator qui renvoie un autre type d'interface appelé interface IEnumerator pour cette collection particulière. IEnumerator, en revanche, est l'interface de base de tous les énumérateurs non génériques utilisés pour lire les données de la collection. Cependant, les énumérateurs ne peuvent pas être utilisés pour modifier la collection sous-jacente..

Les méthodes

L'interface IEnumerable définit une seule méthode GetEnumerator (), qui est une méthode d'instance utilisée sur plusieurs types de collection. Il obtient un itérateur IEnumerator qui peut être utilisé pour parcourir toutes les valeurs de la collection. Lorsque vous écrivez une boucle foreach en C #, le code qu'il génère appelle la méthode GetEnumerator pour créer l'énumérateur utilisé par la boucle..

En revanche, IEnumerator utilise deux méthodes, MoveNext () et Reset (), ainsi qu'une propriété Current. La méthode MoveNext () prend l'énumérateur sur l'élément suivant de la collection, tandis que la méthode Reset () définit l'énumérateur sur sa position par défaut qui se trouve avant le premier élément de la collection..

la mise en oeuvre

IEnumerable est une interface générique qui fournit une abstraction pour boucler sur des éléments et en implémentant l'interface IEnumerable, une classe générique permet essentiellement l'itération via l'interface IEnumerator. Ce faisant, ces classes fournissent finalement une interface commune permettant de récupérer une instance d'un objet IEnumerator prenant en charge l'ensemble des méthodes de navigation de base..

IEnumerator est l'interface de base pour les énumérateurs et l'utilisation de l'interface IEnumerable nécessite que la classe implémente l'IEnumerator. Les deux interfaces doivent être implémentées si vous souhaitez prendre en charge foreach. La classe abstraite 'AbstractEnumerator' implémente l'interface IEnumerator.

Fonctionnalité de IEnumerable et IEnumerator

L’interface IEnumerable, ainsi que la prise en charge de l’interface IEnumerator, vous permettent d’itérer sur les éléments de la pile à l’aide de l’instruction 'foreach'. C'est l'interface de base utilisée pour les objets de type collection. L'itération commence par le premier élément de la pile et se termine par le plus ancien élément de la pile. En termes simples, il représente un objet pouvant être énuméré.

Avec l'interface IEnumerator, ils permettent d'itérer les éléments ArrayList de manière séquentielle et normalisée, en commençant par le premier élément. L'instruction foreach utilise les méthodes et les propriétés de l'interface IEnumerator pour itérer tous les éléments d'une collection..

IEnumerable vs IEnumerator: Tableau de comparaison

Résumé de IEnumerable vers IEnumerator

En un mot, IEnumerable et IEnumerator sont des interfaces utilisées pour énumérer ou itérer une classe ayant une nature de collection, ce qui signifie qu'elles facilitent l'accès itératif dans une collection personnalisée. IEnumerable est l'interface générique disponible pour les objets de type collection. En implémentant l'interface IEnumerable, une classe générique permet essentiellement l'itération via l'interface IEnumerator. Il utilise une seule méthode GetEnumerator qui renvoie une instance de classe d'énumérateur qui implémente l'interface IEnumerator. L'interface IEnumerator est destinée à être utilisée comme accesseur et ne peut pas être utilisée pour modifier la collection sous-jacente. Il fournit deux méthodes abstraites Reset () et MoveNext () et une propriété Current pour appeler un élément particulier d'une collection..