Count-Eigenschaft vs Count () -Methode?
Arbeiten mit einer Sammlung habe ich die zwei Möglichkeiten immer die Anzahl der Objekte; Count (Eigenschaft) und Count() die Methode. Wer weiß, was die wichtigen Unterschiede sind? Ich mag mich irren, aber ich benutze immer die Count-Eigenschaft in den bedingten Anweisungen, da ich annehme, dass die Count () - Methode führt eine Art von Abfrage vor der Sammlung, bei der als Graf muss bereits zugewiesen wurden vor mir 'bekommen.' Aber das ist eine Vermutung - ich weiß nicht, ob die Leistung beeinträchtigt werden, wenn ich falsch bin.
EDIT: Aus Neugier dann wird Count() eine exception werfen, wenn die collection null ist? Denn ich bin mir ziemlich sicher, dass die Count-Eigenschaft gibt einfach 0.
.
- operator, um etwas, das null ist. Kommentarautor: AaronLSInformationsquelleAutor der Frage JᴀʏMᴇᴇ | 2011-11-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dekompilieren, den Quellcode für die
Count()
Erweiterung Methode zeigt, dass es testet, ob das Objekt eineICollection
(öffentlich oder anderweitig), und wenn ja, gibt einfach die zugrunde liegendenCount
Eigenschaft:So, wenn der code greift auf
Count
stattCount()
umgehen Sie die Typ-Prüfung - eine theoretische performance-Vorteile bringt bezweifle ich aber es wäre Auffällig!InformationsquelleAutor der Antwort Ian Nelson
Leistung ist nur ein Grund, um das eine oder andere entscheiden. Die Auswahl an .Count() bedeutet, dass Ihr code werden mehr Generika. Ich hatte schon Gelegenheiten, wo ich die überarbeitete einige code, der nicht mehr hergestellt wird, eine Sammlung, sondern etwas allgemeiner, wie ein IEnumerable, aber andere code kaputt ist, wie ein Ergebnis, denn es hing auf
.Count
und ich hatte zu ändern, um.Count()
. Wenn ich einen Punkt, um.Count()
überall, würde der code wahrscheinlich besser wiederverwendbar und wartbar. In der Regel entscheiden sich zu nutzen, die mehr generische Schnittstellen, wenn Sie Weg erhalten können, ist Ihre beste Wette. Durch mehr generisch, ich meine die einfachere Schnittstelle, die implementiert wird, indem mehrere Arten, und damit netting Sie eine bessere Kompatibilität zwischen-code.Ich sage nicht, dass
.Count()
besser ist, ich sage nur, es gibt andere überlegungen, die sich stärker mit der Wiederverwendbarkeit des Codes, den Sie schreiben.InformationsquelleAutor der Antwort AaronLS
Den
.Count()
Methode könnte intelligent genug sein, oder wissen, über die Art in Frage, und wenn ja, ist es könnte Verwendung der zugrunde liegenden.Count
Eigenschaft.Dann wieder, ist es vielleicht nicht.
Ich würde sagen, es ist sicher anzunehmen, dass, wenn die Sammlung hat eine
.Count
Immobilie selbst, das ist Ihre beste Wette, wenn es zur Leistung kommt.Wenn die
.Count()
Methode nicht kennt, über die Sammlung, sammelt über Sie, was eine O(n) - operation.InformationsquelleAutor der Antwort Lasse Vågsæther Karlsen
Count () - Methode ist eine Erweiterung Methode, durchläuft jedes element einer IEnumerable<> und zurückgibt, wie viele Elemente es sind. Wenn die Instanz von IEnumerable ist eigentlich ein List<>, so ist es optimiert, um die Anzahl Eigentum statt Durchlaufen aller Elemente.
InformationsquelleAutor der Antwort AntonioR
Wenn es eine Anzahl oder Länge Eigenschaft, sollten Sie immer bevorzugen, dass der Count () - Methode, die in der Regel durchläuft die gesamte Kollektion, um die Anzahl der Elemente innerhalb. (Ausnahmen wäre, wenn der Count () - Methode gegen eine Linq to SQL oder Linq to Entities-Quelle, zum Beispiel, in welchem Fall es würde eine count-Abfrage an die Datenquelle. Selbst dann, wenn es eine Count-Eigenschaft, Sie wollen lieber das, denn es hat wahrscheinlich weniger zu tun.)
InformationsquelleAutor der Antwort Dave C
Die Count () - Methode ist die LINQ-Methode, die funktioniert auf jeden IEnumerable<>. Würden Sie erwarten, dass die Count () - Methode Durchlaufen Sie die gesamte Kollektion zu finden, die zählen, aber ich glaube, der LINQ-code tatsächlich hat einige Optimierungen drin, um zu erkennen, ob eine Count-Eigenschaft vorhanden ist, und wenn ja, verwenden Sie diese.
Also Sie sollten beide fast identisch Dinge. Die Count-Eigenschaft ist wohl etwas besser da es doesn ' T müssen eine Art check-in gibt.
InformationsquelleAutor der Antwort Dylan Smith
Kurze Version: Wenn Sie die Wahl haben zwischen einem
Count
Eigenschaft und eineCount()
Methode wählen Sie immer die Eigenschaft.Den Unterschied vor allem um die Wirtschaftlichkeit des Betriebes. Alle BCL Sammlungen, die über eine
Count
Eigenschaft in einer O(1) - Mode. DieCount()
Methode obwohl, kann, und oft wird, die Kosten O(N). Es gibt einige Prüfungen, um zu versuchen und bekommen es zu O(1) für einige Implementierungen, aber es ist keineswegs garantiert.InformationsquelleAutor der Antwort JaredPar
Count()
ist es als eine Erweiterung Methode von LINQ -Count
ist eine Eigenschaft, die aufList
s, tatsächlich .NET collection-Objekte.Als solche
Count()
wird fast immer langsamer sein, da er aufzählen der Sammlung /queryable Objekt. Auf einer Liste, queue, stack, etc, verwenden SieCount
. Oder für ein array -Length
.InformationsquelleAutor der Antwort Kieren Johnstone