How should I get the length of an IEnumerable?

asked7 years ago
last updated5 years ago
viewed26.3k times
Up Vote11Down Vote

I was writing some code, and went to get the length of an IEnumerable. When I wrote myEnumerable.Count(), to my surprise, it did not compile. After reading Difference between IEnumerable Count() and Length, I realized that it was actually Linq that was giving me the extension method.

Using .Length does not compile for me either. I am on an older version of C#, so perhaps that is why.

What is the best practice for getting the length of an IEnumerable? Should I use Linq's Count() method? Or is there a better approach. Does .Length become available on a later version of C#?

Or if I need the count, is an IEnumerable the wrong tool for the job? Should I be using ICollection instead? Count the items from a IEnumerable without iterating? says that ICollection is a solution, but is it the right solution if you want an IEnumerable with a count?

Obligatory code snippet:

var myEnumerable = IEnumerable<Foo>();

int count1 = myEnumerable.Length; //Does not compile

int count2 = myEnumerable.Count(); //Requires Linq namespace

int count3 = 0; //I hope not
for(var enumeration in myEnumerable)
{
    count3++;
}