这个ToArray()实现如何更优化?

Vim*_*987 1 .net c# arrays optimization

我只是看看我们的代码库的历史记录,并找到了一个从这里改变的签到:

    public virtual T[] ToArray()
    {
        List<T> list = new List<T>();
        foreach (object item in List)
        {
            list.Add((T)item);
        }

        return list.ToArray();
    }
Run Code Online (Sandbox Code Playgroud)

对此:

    public virtual T[] ToArray()
    {
        T[] result = new T[List.Count];
        for (int i = 0; i < List.Count; ++i)
        {
            result[i] = (T)List[i];
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)

评论:优化ToArray实现,以避免在流程中创建多个数据结构.

我想知道为什么这里有一个优化.for()可能比foreach()"创建多个数据结构" 更快,但在哪里?

P/S:写这篇文章的人现在正在度假

Jon*_*eet 9

在原始代码中,您创建了一个List<T>- 没有指定容量,因此它可能涉及多次复制内部数组 - 然后您调用ToArrayList<T>,从而产生一个副本.

较新版本不会这样做.它创建一个数组,并将原始列表复制到其中.

不可否认,只使用LINQ的ToArray方法会更简单,甚至可能更有效,并且不清楚为什么这是一个虚拟方法,但......