我有一个List<Mail> mails
,想要将前100个元素复制到一个新列表中,因为我想在数据网格中显示它们。但是mails
可能包含超过9000个元素,如果我使用mails
,那么这将需要太长时间。
对于一个 List<T>
,最有效的方法可能是使用其内置的 List<T>.GetRange(int index, int count)
方法。
var result = mails.GetRange(0, 100);
这种实现可能比使用Linq更有效,因为List<>
实现可以利用私有数据进行优化。
实现方式如下(来自Reflector):
List<T> list = new List<T>(count);
Array.Copy(this._items, index, list._items, 0x0, count);
list._size = count;
return list;
ToList()
,它实际上不会执行任何操作,因此速度肯定会更快。 - Matthew Watson