Does dot net have an interface like IEnumerable with a count property? I know about interfaces such as IList and ICollection which do offer a Count property but it seems like these interfaces were designed for mutable data structures first and use as a read only interface seems like an afterthought – the presence of an IsReadOnly field and mutators throwing exceptions when this property is true is IMO ample evidence for this.
For the time being I am using a custom interface called IReadOnlyCollection (see my own answer to this post) but I would be glad to know of other alternative approaches.
The key difference between the ICollection family and the IEnumerable family is the absence of certainty as to the count of items present (quite often the items will be generated/loaded/hydrated as needed) – in some cases, an Enumerable may not ever finish generating results, which is why the Count is missing.
Deriving and adding a Count is possible depending on your requirements, but it goes against this spirit, which is the purpose of ICollection – a collection of stuff that’s all there.
Another way might be to use the System.Linq.Enumerable.Count method, i.e.
or use the (System.Linq.Enumerable) .ToList() to pull all the items from the enumerator into a Collection and work from there.
(Also to answer your comment before having 50 rep:- the ‘.Count()’ bit is a call to an extension method on the extension class System.Linq.Enumerable – the extension method is available on all things that derive from IEnumerable because the code has a ‘using System.Linq’ which brings the extension methods in all classes in that namespace into scope – in this case its in the class Enumerable. If you’re in VS, pressing F12 will bring you to the definition of S.L.Enumerable. BTW C# In Depth is a fantastic book for learning LINQ properly – its a page turner thats really helps you get the whole picture compared to learning the bits of LINQ piece by piece)