Convert IEnumerable<int> to int[]
Use the .ToArray()
extension method if you're able to use System.Linq
If you're in .Net 2 then you could just rip off how System.Linq.Enumerable implements the .ToArray
extension method (I've lifted the code here almost verbatim - does it need a Microsoft®?):
struct Buffer<TElement>{ internal TElement[] items; internal int count; internal Buffer(IEnumerable<TElement> source) { TElement[] array = null; int num = 0; ICollection<TElement> collection = source as ICollection<TElement>; if (collection != null) { num = collection.Count; if (num > 0) { array = new TElement[num]; collection.CopyTo(array, 0); } } else { foreach (TElement current in source) { if (array == null) { array = new TElement[4]; } else { if (array.Length == num) { TElement[] array2 = new TElement[checked(num * 2)]; Array.Copy(array, 0, array2, 0, num); array = array2; } } array[num] = current; num++; } } this.items = array; this.count = num; } public TElement[] ToArray() { if (this.count == 0) { return new TElement[0]; } if (this.items.Length == this.count) { return this.items; } TElement[] array = new TElement[this.count]; Array.Copy(this.items, 0, array, 0, this.count); return array; }}
With this you simply can do this:
public int[] ToArray(IEnumerable<int> myEnumerable){ return new Buffer<int>(myEnumerable).ToArray();}
Call ToArray
after a using directive for LINQ:
using System.Linq;...IEnumerable<int> enumerable = ...;int[] array = enumerable.ToArray();
This requires .NET 3.5 or higher. Let us know if you're on .NET 2.0.