Diferența dintre IEnumerable și IEnumerator

Înainte de a sari în diferența dintre IEnumerable și IEnumerator, să înțelegem mai întâi termenii Enumerator și Enumerable și când și de ce să îi folosim.

Enumerable este un modul folosit în clasa Array care vă oferă Enumerator. Clasa în sine nu are fiecare metodă. De fapt, utilizează o metodă numită "GetEnumerator" care vă oferă un Enumerator pentru a-și recupera elementul.

Un Enumerator este un obiect care returnează fiecare element într-o colecție într-o anumită ordine, exact așa cum este cerut. Compilatorul generează codul care utilizează un Enumerator, atunci când scrieți o buclă foreach în C #.

IEnumerator este o interfață implementată de un enumerator și clasa enumerabilă implementează interfața IEnumerable.

Ce este enumerabil?

IEnumerable este o interfață de bază folosită pentru a obține un obiect care știe cum să enumere (sau itera) asupra elementelor din colecție.

Este o implementare a modelului iterator care oferă un mecanism de traversare a unui obiect din colecție, indiferent de structura sa internă. Interfața IEnumerable reprezintă un obiect care poate fi iteratat într-o colecție.

Utilizează o singură metodă "GetEnumerator" care returnează o instanță de clasă enumerator care implementează interfața IEnumerator.

Ce este Ienumerator?

Interfața IEnumerator, pe de altă parte, declară două metode - Reset () și MoveNext () - și o proprietate, Current. MoveNext () returnează un val de boolean care indică sfârșitul listei și ajută la poziționarea primului element din listă după apelarea metodei Reset () - a setat enumeratorul la poziția sa implicită pentru a re-itera lista din început.

Proprietatea curentă poate fi apelată numai printr-o instanță a interfeței IEnumerator și returnează elementul curent din listă.

Diferența dintre IEnumerable și IEnumerator

Noțiuni de bază despre IEnumerable și Ienumerator

Atât IEnumerable, cât și IEnumerator sunt interfețe care implementează modelul de design al software-ului iterator în .Net Framework împreună. Cadrul .Net permite accesarea elementelor individuale în colecția particularizată în timp ce implementează interfețe IEnumerable și IEnumerator. Interfața IEnumerable declară doar o metodă numită GetEnumerator care returnează un alt tip de interfață numită interfața IEnumerator pentru respectiva colecție. IEnumerator, pe de altă parte, este interfața de bază pentru toți enumeratorii non-generici care sunt utilizați pentru a citi datele din colecție. Cu toate acestea, enumeratorii nu pot fi utilizați pentru a modifica colecția de bază.

metode

Interfața numită "Numără" definește numai o metodă GetEnumerator (), care este o metodă de instanță folosită pe mai multe tipuri diferite de colecții. Ea devine un iterator IEnumerator care poate fi folosit pentru a itera peste toate valorile din colecție. Când scrieți o buclă foreach în C #, codul pe care îl generează apelează metoda GetEnumerator pentru a crea Enumerator folosit de buclă.

IEnumerator, pe de altă parte, utilizează două metode MoveNext () și Reset () și o proprietate curentă. Metoda MoveNext () duce evaluatorul la elementul următor al colecției, în timp ce metoda Reset () stabilește enumeratorul în poziția sa implicită, care este înainte de primul element al colecției.

Punerea în aplicare

IEnumerable este o interfață generică care oferă o abstractizare pentru looping peste elemente și prin implementarea interfeței IEnumerable, o clasă generică permite în mod substanțial iterația prin interfața IEnumerator. În acest scop, aceste clase se termină prin furnizarea unei interfețe comune pentru a prelua o instanță a unui obiect IEnumerator care acceptă toate seturile de bază de metode de navigare.

IEnumerator este interfața de bază pentru enumeratori și utilizarea interfeței IEnumerable necesită ca clasa să implementeze IEnumerator. Ambele interfețe trebuie să fie implementate, dacă doriți să oferiți suport pentru foreach. Clasa abstractă "AbstractEnumerator" implementează interfața IEnumerator.

Funcționalitatea IEnumerable și IEnumerator

Interfața IEnumerable, împreună cu interfața IEnumerator de sprijin, vă permite să iterați peste elementele din teanc folosind instrucțiunea "foreach". Este interfața de bază utilizată pentru obiectele de tip colecție. Repetarea începe cu elementul de sus din teanc și se termină cu cel mai vechi element din teanc. Pur și simplu pus, reprezintă un obiect care poate fi enumerat.

Împreună cu interfața IEnumerator, acestea permit elementelor ArrayList să fie iterate în mod standardizat, secvențial, începând cu primul element și înainte. Instrucțiunea foreach utilizează metodele și proprietățile interfeței IEnumerator pentru a itera toate elementele dintr-o colecție.

IEnumerable vs. IEnumerator: Graficul de comparație

Rezumatul IEnumerator IEnumerable verses

Pe scurt, atât IEnumerable, cât și IEnumerator sunt interfețe folosite pentru a enumera sau itera o clasă care are o natură de colectare, ceea ce înseamnă că facilitează accesul iterativ într-o colecție personalizată. IEnumerable este interfața generică disponibilă pentru obiectele de tip colecție și prin implementarea interfeței IEnumerable, o clasă generică permite în mod substanțial iterația prin interfața IEnumerator. Utilizează o singură metodă GetEnumerator care returnează o instanță de clasă enumerator care implementează interfața IEnumerator. Interfața IEnumerator este menită să fie utilizată ca accesoriu și nu poate fi utilizată pentru a modifica colecția de bază. Acesta oferă două metode abstracte Reset () și MoveNext () și o proprietate curentă pentru a apela un element particular dintr-o colecție.