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