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#必备的两个工具。
最新文章
- Win10 Migrate apps to the Universal Windows Platform (UWP)
- php开发(TP框架使用)
- 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
- 93、App Links (应用程序链接)实例
- 四则运算2--设计思路--软件工程-c++
- C#使用SMTP发送邮件
- Bean不同配置方式比较
- Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)
- c#拖放
- ios开发之xcode6中如何添加pch全局引用文件
- Java 学习 第三篇;面向对象
- Swift 可展开可收缩的表视图
- Ubuntu12.04password正确 入口的桌面(测试的恢复正常)
- 【微信公众平台开发】百度周边搜索接口php封装
- 双向循环链表(C语言描述)(一)
- win8系统下,python 2.7安装xlrd,xlutils和xlwt的方法
- idhttp采集时遇到乱码问题解决
- GMA Round 1 向量计算
- MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.1 A map with single layer
- HTTP请求代码整理