博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq转换操作之ToArray,ToList,ToDictionary源码分析
阅读量:5268 次
发布时间:2019-06-14

本文共 719 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
重新学习python系列(二)? WTF?
查看>>
JQ中 trigger()和triggerHandler()区别
查看>>
Rsync + inotify 实现文件实时同步
查看>>
TMDXEVM6678L EVM开发板初使用(1)
查看>>
FreeRTOS任务暂停和启动函数
查看>>
02-CSS基础与进阶-day11_2018-09-17-20-55-43
查看>>
本地储存
查看>>
Hibernate主键生成策略
查看>>
Spring事物管理
查看>>
vue项目刷新当前页面
查看>>
基于云端的开发平台Team Foundation Service
查看>>
Linq过滤符号Where/Skip/TakeWhile/Distinct使用实例讲解
查看>>
[BZOJ] 1611: [Usaco2008 Feb]Meteor Shower流星雨
查看>>
TCP的拥塞控制
查看>>
react-native-echarts构建的图表出现滚动条并且可以滑动的问题
查看>>
ENVI扩展工具:HDF5 Browser
查看>>
关于scanf与cin哪个快的问题
查看>>
UVa 1363 (数论 数列求和) Joseph's Problem
查看>>
python数据分析panda库
查看>>
mysql 5.17 的update失败问题
查看>>