369 Stimmen

Zählen Sie die Elemente aus einer IEnumerable<T> ohne Iteration?

private IEnumerable<string> Tables
{
    get
    {
        yield return "Foo";
        yield return "Bar";
    }
}

Sagen wir, ich möchte diese iterieren und etwas wie die Verarbeitung von #n von #m schreiben.

Gibt es eine Möglichkeit, wie ich den Wert von m herausfinden kann, ohne vor meiner Hauptiteration zu iterieren?

Ich hoffe, ich habe mich klar ausgedrückt.

2voto

Abhas Bhoi Punkte 333

Der beste Weg, den ich gefunden habe, ist die Zählung, indem ich sie in eine Liste umwandle.

IEnumerable<T> enumList = ReturnFromSomeFunction();

int count = new List<T>(enumList).Count;

2voto

JP Alioto Punkte 44283

Hier ist eine großartige Diskussion über faule Bewertung y verzögerte Ausführung . Um diesen Wert zu erhalten, müssen Sie die Liste im Grunde genommen materialisieren.

-1voto

Hugo Punkte 102

Es kann nicht die beste Leistung liefern, aber Sie können LINQ verwenden, um die Elemente in einer IEnumerable zu zählen:

public int GetEnumerableCount(IEnumerable Enumerable)
{
    return (from object Item in Enumerable
            select Item).Count();
}

-1voto

Jonathan Allen Punkte 65707

Ich würde vorschlagen, ToList aufzurufen. Ja, Sie tun die Aufzählung früh, aber Sie haben immer noch Zugriff auf Ihre Liste der Elemente.

-2voto

Oliver Kötter Punkte 985

Utilizo IEnum<string>.ToArray<string>().Length und es funktioniert gut.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X