Sök…


Introduktion

IEnumerable är IEnumerable för alla icke-generiska samlingar som ArrayList som kan räknas upp. IEnumerator<T> är basgränssnittet för alla generiska teller som Lista <>.

IEnumerable är ett gränssnitt som implementerar metoden GetEnumerator . Metoden GetEnumerator returnerar en IEnumerator som ger alternativ för att iterera genom samlingen som förhand.

Anmärkningar

IEnumerable är basgränssnittet för alla icke-generiska samlingar som kan räknas upp

IEnumerable

I sin mest grundläggande form representerar ett objekt som implementerar IEnumerable en serie objekt. Objekten i fråga kan itereras med nyckelordet c # foreach .

I exemplet nedan, objekt sequenceOfNumbers implementerar IEnumerable. Det representerar en serie heltal. foreach slingan itererar igenom var och en i tur och foreach .

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

IEnumerable med anpassad Enumerator

Genom att implementera IEnumerable-gränssnittet kan klasser räknas upp på samma sätt som BCL-samlingar. Detta kräver utvidgning av klassen Enumerator som spårar uppräkningen.

Andra än att upprepa en standardsamling inkluderar exempel:

  • Använda antal intervaller baserade på en funktion snarare än en samling av objekt
  • Implementera olika iterationsalgoritmer över samlingar, som DFS eller BFS i en grafsamling
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow