Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
二:linq的分区操作
常用的分区操作:Take,TakeWhile,Skip,SkipWhile
三:Take
1. 注释: 从序列的开头返回指定数量的连续元素
2. 实战:            
            var nums = new int[] { 10, 20, 30, 40, 50, 60 };
var query = nums.Take(2).ToList(); // 10,20
3. 探究源码:
四:TakeWhile
1. 注释: 只要满足指定的条件,就会返回序列的元素。 【find】
2. var nums = new int[] { 10, 20, 30, 40, 50, 60 };
var query = nums.TakeWhile(i => i < 20);
3. 大家要记住,TakeWhile和Where的区别在于,TakeWhile是从前往后计算,如果遇到不满足Func条件,则提前退出。
4. 源代码研究:
IL_0041: ldfld class [mscorlib]System.Func`2<!0, bool> class System.Linq.Enumerable/'<TakeWhileIterator>d__26`1'<!TSource>::predicate
			IL_0046: ldloc.2
			IL_0047: callvirt instance !1 class [mscorlib]System.Func`2<!TSource, bool>::Invoke(!0)
			IL_004c: brfalse.s IL_0075
这里是在MoveNext中执行的,如果predicate为false,则直接退出。
五:Skip
1. 跳过序列中指定数量的元素,然后返回剩余的元素。
2.实战:
var nums = new int[] { 10, 20, 30, 40, 50, 60 };
var query = nums.Skip(3);
六:SkipWhile
大家一定要知道SkipWhile的灵活性是Skip的延伸。
static void Main(string[] args)
        {
            var nums = new int[] { 10, 20, 30, 40, 50, 60 };
var query = nums.SkipWhile(i => i < 30);
}
从linq中我们要知道,ILSpy和ILDasm是我们学习C#必备的两个工具。
Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析的更多相关文章
- Linq集合操作之Intersect,Except,Union源码分析
		
Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...
 - Linq限定操作之All,Any,Contains源码分析
		
Linq限定操作之All,Any,Contains源码分析 linq的限定操作 常见的限定操作: All,Any,Contains 一:All 1. 解释: 确定序列中的所有元素是否满足条件. 从字面 ...
 - Linq转换操作之ToArray,ToList,ToDictionary源码分析
		
Linq转换操作之ToArray,ToList,ToDictionary源码分析 一:linq中的转换运算符 1. ToArray 我们经常用在linq查询上吧. linq只能运用在IEnumerab ...
 - Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析
		
Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析 一: AsParallel [并行化查询] 这个函数的功效就是将计算结果多线程化.[并行计算] =>[多核 ...
 - Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
		
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
 - Linq特取操作之ElementAt,Single,Last,First源码分析
		
Linq特取操作之ElementAt,Single,Last,First源码分析 一:linq的特取操作 First/FirstOrDefault, Last/LastOrDefault, Eleme ...
 - Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
		
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
 - Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
		
Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析 Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化 ...
 - Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
		
Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...
 
随机推荐
- django之部署
			
布署 从uwsgi.nginx.静态文件三个方面处理 服务器介绍 服务器:私有服务器.公有服务器 私有服务器:公司自己购买.自己维护,只布署自己的应用,可供公司内部或外网访问 公有服务器:集成好运营环 ...
 - MacOS下JDK6源码配置
			
参考:http://www.mkyong.com/mac/how-to-download-jdk-source-code-for-mac-os-x/ 系统默认的JDK是没有源码的,据说这是因为此JDK ...
 - C语言调用汇编
			
程序的入口是main,在main里调用汇编的函数. 首先要解决怎么定义函数的问题 在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现. 在汇编里面,用EXPORT 把C语言定义的 ...
 - Spring与Redis的实现
			
前言 Redis作为缓存还是相当不错的,一定程度上缓解了数据库的IO操作,具体不多说,具体网上查找资料. 实战 不多说,直接上代码. 第一步:所需要的依赖 <!-- redis --> & ...
 - nodejs开发工具
			
我选择的是Hbuilder作为node项目的开发工具. 先在Hbuilder 里面安装nodeEclipse插件,然后重启工具. 点击添加项目,选择其他选项,出现下图选项,然后选择圈住的选项点击下 ...
 - linux进阶与hadoop
			
Linux进阶命令: find . | ls --help | more grep ll | grep 1.txt grep -ri BASH 1.txt grep -ri BASH ...
 - 刷题向》关于一道尺取法的神题目(BZOJ4653)(HARD-)(BZOJ 30题纪念)
			
不得不说,这也许会是一道长期在我的博客里作为“HARD”难度存在的题 这道题能很好的考验选手的思考能力,但本蒟蒻最后还是听了省队爷讲了之后才会...(默默面壁) 题目里,说对于每一个点,是用当前选出的 ...
 - java-tip-各种Map的区别及如何选择
			
这里主要讨论这三种:HashMap.LinkedHashMap.TreeMap 1. HashMap是常规的哈希表,查询以及插入的性能最好,如果没有特殊要求,应该使用这个 2. LinkedHashM ...
 - XPath在python中的高级应用
			
XPath在python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. XPath介绍: ...
 - Greeplum 系列(六) 备份与恢复
			
Greeplum 系列(六) 备份与恢复 http://www.dbdream.com.cn/category/greenplum/ 先介绍几个命令查看 Greenplum 集群状态: # 1. 查看 ...