IEnumerable kann nicht zählen, ohne zu iterieren.
Unter "normalen" Umständen wäre es für Klassen, die IEnumerable oder IEnumerable<T> implementieren, wie z. B. List<T>, möglich, die Methode Count zu implementieren, indem sie die Eigenschaft List<T>.Count zurückgeben. Die Count-Methode ist jedoch keine Methode, die in der Schnittstelle IEnumerable<T> oder IEnumerable definiert ist. (Die einzige Methode, die tatsächlich definiert ist, ist GetEnumerator.) Das bedeutet, dass für sie keine klassenspezifische Implementierung bereitgestellt werden kann.
Vielmehr handelt es sich bei Count um eine Erweiterungsmethode, die für die statische Klasse Enumerable definiert wurde. Das bedeutet, dass sie auf jeder Instanz einer von IEnumerable<T> abgeleiteten Klasse aufgerufen werden kann, unabhängig von der Implementierung dieser Klasse. Aber es bedeutet auch, dass sie an einer einzigen Stelle implementiert ist, außerhalb jeder dieser Klassen. Das bedeutet natürlich, dass sie auf eine Weise implementiert werden muss, die völlig unabhängig von den Interna dieser Klassen ist. Die einzige Möglichkeit, die Zählung durchzuführen, ist die Iteration.