Nein, das Gegenteil kann wahr sein. Wenn es sich nicht um eine Sammlung handelt (wie zum Beispiel List
oder Array
), sondern um eine zurückgestellte, ausgeführte Abfrage, muss sie vollständig ausgeführt werden, was sehr teuer sein kann, nur um die Anzahl zu bestimmen. In deinem Beispiel ist es tatsächlich ein List
, Enumerable.Count
ist schlau genug um zu versuchen, es zuerst auf ein ICollection<T>
/ ICollection
zu werfen. Wenn das gelingt, wird die Eigenschaft Count
verwendet.
Also benutze einfach foreach
. Es tut nicht weh, wenn die Sequenz leer ist, die Schleife wird sofort verlassen.
Aus demselben Grund ist es besser, Enumerable.Any
anstelle von Count() > 0
zu verwenden, wenn Sie nur überprüfen möchten, ob eine Sequenz mindestens ein Element enthält. Die Absicht ist auch klarer.
Wenn Ihr Enumarable faul ausgewertet wird (LINQ), ist der Aufruf von Count()
tatsächlich sehr schlecht, da es die gesamte Enumerable auswertet.
Da foreach nicht ausgeführt wird, wenn das Enumarable leer ist, ist es am besten, Count
nicht zu verwenden.
Ich glaube nicht, dass es eine Geschwindigkeitsverbesserung gibt oder tatsächlich darauf hinweist, das Count()
einer Enumerable zu überprüfen, bevor ich über die Sammlung iteriere / forsche. Da innerhalb des Foreach-Blocks kein Code ausgeführt wird, wenn ohnehin keine Objekte in der Sammlung vorhanden sind.
Kurze Antwort: Nein, im Gegenteil.
Längere Antwort: Das Schlüsselwort foreach
ruft Methoden auf der Schnittstelle IEnumerator
auf. Diese Methoden überprüfen implizit, ob Elemente vorhanden sind. Der Aufruf von Count()
ist also rein redundant.
Auch wenn Sie nach der Anzahl suchen möchten, verwenden Sie Count anstelle der Erweiterungsmethode Count (), da die Leistung von Count () schlechter ist als Count
Tags und Links c#