从通用IEnumerable
实现转换为T数组的最佳方法是什么?我目前的解决方案如下所示:
IEnumerablefoo = getFoo(); string[] bar = new List (foo).ToArray();
通过一个List
似乎不必要的转移,但我还没有找到一个更好的方法来做到这一点.
注意:我在这里使用C#2.0.
调用ToArray
扩展方法上IEnumerable
,它几乎与下面相同的,执行型嗅探和其他一些优化.
一般来说,使用a List
进行初始化IEnumerable
然后调用ToArray
可能是最简单的方法.
该用于构造List
将检查IEnumerable
,看它是否实现ICollection
获得项目数正确初始化列表的能力.如果没有,它将正常扩展.
当然,您可能最终List
只是为了转换IEnumerable
而创建了许多实例T[]
.为此,您可以编写自己的方法,但实际上只是复制List
已存在的代码.
做一点.NET反射器看起来像Linq ToArray扩展方法基本上和通过List <>传递IEnumerable一样.Buffer类是内部的,但行为看起来与List <>非常相似.
public static TSource[] ToArray(this IEnumerable source) { if (source == null) { throw Error.ArgumentNull("source"); } Buffer buffer = new Buffer (source); return buffer.ToArray(); }