NetCore List揭秘

一、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() 示例分析
在这里插入图片描述
进入扩展方法SelectstudentListList类型,所以返回SelectListIterator迭代器对象,该对象包含投影方法和lList数据。
进入扩展方法ToListSelectListIterator实现了IIListProvider方法,所以实际上是调用SelectListIterator自己的ToList方法,该方法源码如下:
在这里插入图片描述
IPartition是一个用于处理分页的接口,该接口继承了 IIListProvider,因此SelectListIterator类需实现方法ToList
进入该方法后,获取studentList内元素个数,因为List实现了ICollection接口,所以通过属性值Count直接获取序列内元素个数;
定义新的List序列。
在序列每个元素上执行投影操作,将结果存入新建的List中;
返回List对象。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值