Der beste Weg, um IEnumerable & lt; T & gt;
Was ist der beste/einfachste Weg, um eine Zählung der Elemente im IEnumerable-Auflistung ohne Aufzählung über alle Elemente in der Auflistung?
Möglich mit LINQ oder Lambda?
InformationsquelleAutor der Frage Sean Chambers | 2008-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie auflisten, um einen count. Andere Konstrukte wie die Liste halten eine laufende Zählung.
InformationsquelleAutor der Antwort Brian Leahy
Die Lösung hängt davon ab, warum Sie nicht möchten, dass zum Durchlaufen der collection.
Wenn es ist, weil die Aufzählung der Sammlung vielleicht langsam sein, dann gibt es keine Lösung, die schneller sein wird. Möchten Sie vielleicht zu prüfen, mit eine ICollection statt, wenn möglich. Es sei denn, die Aufzählung ist bemerkenswert langsam (z.B. liest es die Elemente von der Festplatte, die die Geschwindigkeit sollte nicht das problem sein obwohl.
Wenn es ist, weil die Aufzählung der Sammlung erfordert mehr code, dann ist es schon geschrieben worden, für die Sie in form von die .Count () - Erweiterungsmethode. Verwenden Sie einfach MyEnumerable.Count().
Wenn es, weil Sie wollen, um in der Lage zu zählen die Sammlung, nachdem Sie gezählt haben, dann das .Die Count () - Methode ermöglicht dies. Sie können sogar nennen .Count() auf eine collection Sie sind in der Mitte der Aufzählung und wird es tragen, wo es war, bevor der Graf. Zum Beispiel:
geben die Ergebnisse
Wenn es ist, weil die Aufzählung von Nebenwirkungen (z.B. auf die Festplatte schreibt/Konsole) oder ist abhängig von Variablen, die sich ändern können zwischen dem zählen und auflisten (z.B. liest von der Festplatte) [N. B. Wenn möglich, würde ich empfehlen ein überdenken der Architektur, da dies kann dazu führen, eine Menge Probleme] dann eine Möglichkeit zu prüfen ist, Lesen Sie die Aufzählung in eine intermittierende Speicher. Zum Beispiel:
Alle der oben genannten nehme an, Sie können nicht ändern die Art (d.h. es wird wieder von einer Bibliothek, die Sie nicht besitzen). Wenn möglich, möchten Sie vielleicht in Erwägung ziehen, die Verwendung einer ICollection oder IList (ICollection mehr weit Gültigkeitsbereich als IList), die eine Count-Eigenschaft.
InformationsquelleAutor der Antwort ICR
In jedem Fall, müssen Sie eine Schleife durch. Linq bietet die
Count
Methode:InformationsquelleAutor der Antwort Konrad Rudolph
Verwenden.
wird es wieder der Graf.
InformationsquelleAutor der Antwort Mukesh
Gibt, ist auch die IList-oder ICollection, wenn Sie wollen, zu einem Konstrukt, das ist noch etwas flexibel, sondern hat auch die Funktion, die Sie benötigen. Sie beide gehen von IEnumerable.
InformationsquelleAutor der Antwort Joel Coehoorn
Es hängt auch davon ab, was Sie erreichen wollen, indem zu zählen.. Wenn Sie interessiert sind zu finden, wenn die enumerable-Sammlung hat alle Elemente, die Sie nutzen könnten
myEnumerable.Jede() über myEnumerable.Count (), wo die ehemaligen Ausbeute wird das erste element und das später wird die Ausbeute aller Elemente.
InformationsquelleAutor der Antwort Soundararajan
IEnumerable wird Durchlaufen und jedes Element. um die volle Zahl.
Wenn Sie brauchen nur zu überprüfen, ob es ein oder mehrere Elemente in ein IEnumerable eine weitere effiziente Methode ist, um zu überprüfen, ob es irgendwelche. Alle() nur zu überprüfen, um zu sehen, ob es einen Wert gibt und nicht in einer Schleife durch alles.
IEnumerable myStrings = new Liste(){"eins","zwei", "drei"};
bool hasValues = myStrings.Jede();
InformationsquelleAutor der Antwort Timmy Fuller
Nicht möglich, mit LINQ, als Berufung .Count(...) nicht aufzählen, die Sammlung. Wenn Sie laufen in das problem, wo man nicht Durchlaufen eine Sammlung zweimal, versuchen Sie dies:
InformationsquelleAutor der Antwort Greg Hurlman
Wenn Sie brauchen, um count und dann Schleife Sie vielleicht besser mit einer Liste.
Wenn Sie zählen, um zu überprüfen, für die Mitglieder, die Sie verwenden können
Any()
zu vermeiden aufzählen die gesamte Kollektion.InformationsquelleAutor der Antwort Keith
Die beste Lösung ist-wie ich finde, ist Folgendes zu tun:
InformationsquelleAutor der Antwort Moustafa Deif