Linq转换操作之ToArray,ToList,ToDictionary源码分析

本文详细分析了Linq中的ToArray, ToList, 和ToDictionary三种转换运算符的实现原理及源码细节。对于ToArray和ToList,文章介绍了它们如何根据不同类型的输入集合采取不同的处理方式;而对于ToDictionary,则解释了其构建键值对映射的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linq转换操作之ToArray,ToList,ToDictionary源码分析

一:linq中的转换运算符

1. ToArray

我们经常用在linq查询上吧。 linq只能运用在IEnumerable这个集合类型上面。

源码分析: 我们发现如果该类型可以转化为ICollection,我们最后执行CopyTo方法

如果不能转换为ICollection,那么就执行foreach。


2. ToList

这个我们发现比ToArray更简单,如果说可以转换为ICollection,那么它直接使用了List的构造函数,在List的构造函数中,我们看到非常

简单。如果不能转为就执行foreach添加。


3. ToDictionary


var list = new List<int>() { 10, 20, 30 };

var query2 = from n in list
select new { num = n };

var myarr = query2.ToDictionary(i => i.num);

从编译器中我们应该可以看到,toDictionary之后,我们的key是一个int,value为一个匿名类型 'a

[10, 'a],[20,'a],[30,'a]


最终可以看到ToDictionary最后调用的是

foreach (TSource current in source)
{
dictionary.Add(keySelector(current), elementSelector(current));
}

 

 

 

 

转载于:https://www.cnblogs.com/dragon-L/p/6443365.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值