Ricerca…


introduzione

IEnumerable è l'interfaccia di base per tutte le raccolte non generiche come ArrayList che possono essere enumerate. IEnumerator<T> è l'interfaccia di base per tutti gli enumeratori generici come Elenco <>.

IEnumerable è un'interfaccia che implementa il metodo GetEnumerator . Il metodo GetEnumerator restituisce un IEnumerator che fornisce opzioni per scorrere la raccolta come foreach.

Osservazioni

IEnumerable è l'interfaccia di base per tutte le raccolte non generiche che possono essere enumerate

IEnumerable

Nella sua forma più elementare, un oggetto che implementa IEnumerable rappresenta una serie di oggetti. Gli oggetti in questione possono essere iterati utilizzando la parola chiave c foreach .

Nell'esempio seguente, la sequenceOfNumbers oggettiOfNumbers implementa IEnumerable. Rappresenta una serie di numeri interi. Il ciclo foreach esegue iterate a turno ciascuna.

int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
    int returnValue = 0;
    foreach(int i in sequenceOfNumbers) {
        returnValue += i;
    }
    return returnValue;
}

IEnumerable with Enumerator personalizzato

L'implementazione dell'interfaccia IEnumerable consente di classificare le classi allo stesso modo delle raccolte BCL. Ciò richiede l'estensione della classe Enumerator che tiene traccia dello stato dell'enumerazione.

A parte l'iterazione su una raccolta standard, gli esempi includono:

  • Utilizzo di intervalli di numeri basati su una funzione anziché su una raccolta di oggetti
  • Implementazione di algoritmi di iterazione diversi su raccolte, come DFS o BFS su una raccolta di grafici
public static void Main(string[] args) {

    foreach (var coffee in new CoffeeCollection()) {
        Console.WriteLine(coffee);
    }
}

public class CoffeeCollection : IEnumerable {
    private CoffeeEnumerator enumerator;

    public CoffeeCollection() {
        enumerator = new CoffeeEnumerator();
    }

    public IEnumerator GetEnumerator() {
        return enumerator;
    }

    public class CoffeeEnumerator : IEnumerator {
        string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
        int currentIndex = -1;

        public object Current {
            get {
                return beverages[currentIndex];
            }
        }

        public bool MoveNext() {
            currentIndex++;

            if (currentIndex < beverages.Length) {
                return true;
            }

            return false;
        }

        public void Reset() {
            currentIndex = 0;
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow