一、List

List构造函数一共有3个

List底层的实现是通过Array数组来实现的(private T[] _items)


怎么实现无限地往数组里面添加元素?(示意图)

二、LINQ之ToList
System.Linq命名空间下实现IEnumerable<T>的扩展方法。
在开发过程中,LINQ的ToList()方法经常被使用,帮助我们将迭代器转换为具体的List对象。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。

ToList本身代码很简单,就是判断参数source是否实现了IIListProvider接口,如果实现了该接口,则调用该方法进行转换,如果未实现该接口,则直接调用List的构造方法,创建一个新的List,然后返回。
IIListProvider接口定义了三个方法,其中包括ToList方法。

Select().Tolist() 示例分析

进入扩展方法Select,studentList是List类型,所以返回SelectListIterator迭代器对象,该对象包含投影方法和lList数据。
进入扩展方法ToList,SelectListIterator实现了IIListProvider方法,所以实际上是调用SelectListIterator自己的ToList方法,该方法源码如下:

IPartition是一个用于处理分页的接口,该接口继承了 IIListProvider,因此SelectListIterator类需实现方法ToList;
进入该方法后,获取studentList内元素个数,因为List实现了ICollection接口,所以通过属性值Count直接获取序列内元素个数;
定义新的List序列。
在序列每个元素上执行投影操作,将结果存入新建的List中;
返回List对象。
本文探讨了List的内部实现,重点在于如何无限添加元素到数组中,并详细分析了LINQ的ToList方法。通过源码分析,揭示了ToList在转换IEnumerable到List过程中的工作原理,包括对IIListProvider接口的检查和元素投影操作。同时,通过Select().ToList()的示例展示了数据转换的流程,涉及IPartition接口和投影操作的实际应用。
1万+

被折叠的 条评论
为什么被折叠?



