En general, uso una List y luego los devuelvo como IEnumerable cuando ya no necesito actualizarlos.
Sin embargo, me encontré con un problema en el que realmente necesito enumerarlos, pero primero necesito saber el conteo.
¿ IEnumerable enumerará cada elemento y encontrará el recuento (O(N)), o se basará en la propiedad Count de List (O(1))?
Además, ¿qué sucede si IEnumerable es el resultado de una consulta LINQ?
¿IEnumerable enumerará cada elemento y encontrará el recuento (O(N)) o se basará en la propiedad Count de List (O(1))?
Utilizará la propiedad Count . Básicamente, la implementación verifica si el objeto implementa o no ICollection<T> o ICollection , y llama a la propiedad Count relevante si es así. (El uso de ICollection no genérico solo se introdujo en .NET 4; en .NET 3.5 solo notó ICollection<T> ).
Sin embargo, solo está documentado para ICollection<T> :
Si el tipo de origen implementa
ICollection<T>, esa implementación se usa para obtener el recuento de elementos. De lo contrario, este método determina el recuento.