La diferencia clave entre la familia ICollection y la familia IEnumerable es la falta de certeza en cuanto al recuento de elementos presentes (con bastante frecuencia los elementos se generarán/cargarán/hidratarán según sea necesario) - en algunos casos, un Enumerable nunca termine de generar resultados, razón por la cual el Conde está perdido.
Derivar y agregar un conteo es posible dependiendo de sus requisitos, pero va en contra de este espíritu, que es el propósito de ICollection: una colección de cosas que está todo allí.
Otra forma podría ser usar el método System.Linq.Enumerable.Count, es decir
using System.Linq;
class X
{
void Y(IEnumerable<int> collection)
{
int itemCount = collection.Count();
}
}
o utilizar el (System.Linq.Enumerable) .ToList() para tirar de todos los elementos de la empadronador en una Colección y trabaja desde allí.
(También para responder a su comentario antes de tener 50 rep: - el bit ".Count()" es una llamada a un método de extensión en la clase de extensión System.Linq.Enumerable - el método de extensión está disponible en todo lo que deriva de IEnumerable porque el código tiene un "using System.Linq" que pone los métodos de extensión en todas las clases en ese espacio de nombres en el alcance, en este caso está en la clase Enumerable. Si estás en VS, presionando F12 te llevará a . la definición de SLEnumerable BTW C# En Profundidad es un libro fantástico para el aprendizaje de LINQ adecuadamente - es una página que eso es turner realmente le ayuda a obtener toda la imagen en comparación con el aprendizaje de los bits de LINQ pieza por pieza)
No creo que IEnumerator sea la elección correcta si necesita una propiedad Count. Un enumerador hace exactamente eso, enumera cosas y es agnóstico sobre cuántos elementos hay. Los enumeradores no están limitados a enumerar colecciones finitas, piense en la declaración de rentabilidad en C# – Trap
@Trap Acepto que IEnumerator/IEnumerable por sí solo no se puede usar para representar una colección finita, pero seguramente se puede usar como base para un IList y ICollection por ejemplo. Entonces, lo que quiero es IEnumerable + Count property = IReadOnlyCollection. –