我正在阅读一个问题,询问在 LINQ 查询中调用 ToList() 还是 ToArray() 更好吗?并发现自己想知道为什么Enumerable.ToArray()
不首先调用该Count()
方法来查找集合的大小,而不是使用Buffer{T}
动态调整自身大小的内部类。类似于以下内容:
T[] ToArray<T>(IEnumerable<T> source)
{
var count = source.Count();
var array = new T[count];
int index = 0;
foreach (var item in source) array[index++] = item;
return array;
}
我知道我们无法理解设计者和实施者的想法,我相信他们比我聪明得多。所以问这个问题的最好方法是上面显示的方法有什么问题?它似乎减少了内存分配,并且仍然在 O(n) 时间内运行。