Best way to convert an IEnumerable<T> to an T[]

Scott Pedersen picture Scott Pedersen · Jan 31, 2009 · Viewed 9.7k times · Source

What is the best way to convert from a generic IEnumerable<T> implementation to an array of T? The current solution I have looks like the following:

IEnumerable<string> foo = getFoo();
string[] bar = new List<string>(foo).ToArray();

The transfer through a List<T> seems unneccesary, but I haven't been able to find a better way to do it.

Note: I'm working in C# 2.0 here.

Answer

casperOne picture casperOne · Jan 31, 2009

.NET 3.0 and after:

Call the ToArray extension method on IEnumerable<T>, it does nearly the same as below, performing type sniffing and some other optimizations.

.NET 2.0 and before:

Generally speaking, using a List<T> which will be initialized with the IEnumerable<T> and then calling ToArray is probably the easiest way to do this.

The constructor for List<T> will check the IEnumerable<T> to see if it implements ICollection<T> to get the count of items to properly initialize the capacity of the list. If not, it will expand as normal.

Of course, you might end up creating a number of List<T> instances just for the purpose of transforming IEnumerable<T> to T[]. To that end, you can write your own method, but you would really just be duplicating the code that exists in List<T> already.