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源码分析的更多相关文章

  1. Linq集合操作之Intersect,Except,Union源码分析

    Linq集合操作之Intersect,Except,Union源码分析 linq的集合运算 常见的集合运算有哪些? 这三个扩展方法在我们实际使用中用的还是非常多的,而且这里还涉及到了“复杂度” 无算法 ...

  2. Linq限定操作之All,Any,Contains源码分析

    Linq限定操作之All,Any,Contains源码分析 linq的限定操作 常见的限定操作: All,Any,Contains 一:All 1. 解释: 确定序列中的所有元素是否满足条件. 从字面 ...

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

    Linq转换操作之ToArray,ToList,ToDictionary源码分析 一:linq中的转换运算符 1. ToArray 我们经常用在linq查询上吧. linq只能运用在IEnumerab ...

  4. Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析

    Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析 一: AsParallel [并行化查询] 这个函数的功效就是将计算结果多线程化.[并行计算] =>[多核 ...

  5. Linq分组操作之GroupBy,GroupJoin扩展方法源码分析

    Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...

  6. Linq特取操作之ElementAt,Single,Last,First源码分析

    Linq特取操作之ElementAt,Single,Last,First源码分析 一:linq的特取操作 First/FirstOrDefault, Last/LastOrDefault, Eleme ...

  7. Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析

    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...

  8. Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析

    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析 Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化 ...

  9. Linq基础操作之Select,Where,OrderBy,ThenBy源码分析

    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...

随机推荐

  1. leetcode413

    public class Solution { public int NumberOfArithmeticSlices(int[] A) { , sum = ; ; i < A.Length; ...

  2. 前端Blob对象的使用

    最近移动端界面给后台传数据时用到Blob,它可以看做是存放二进制数据的容器: //上传图片数据封装 function uploadPhotoData(data,fileName){ var imgAr ...

  3. 解决linux下root运行Elasticsearch异常

    如果以root身份运行将会出现以下问题 root@yxjay:/opt/elasticsearch-2.3.5/bin# ./elasticsearchException in thread &quo ...

  4. 使用C#通过Oracle.DataAccess连接Oracle,部署时需要注意版本问题

    平时我们开发使用的是32位的PC机,所以安装的也是Oracle32位的客户端.但是一般服务器都是64位的,安装的也是64位的Oracle客户端,如果要部署使用Oracle.DataAccess连接Or ...

  5. Apache Hive (四)Hive的连接3种连接方式

    转自:https://www.cnblogs.com/qingyunzong/p/8715925.html 一.CLI连接 进入到 bin 目录下,直接输入命令: [hadoop@hadoop3 ~] ...

  6. windows下python安装Numpy和Scipy模块

    安装 numpy: 去 http://sourceforge.net/projects/numpy/files/latest/download?source=files 下载相应的exe安装文件. 安 ...

  7. HRESULT:0x80070057 (E_INVALIDARG)

    笔记本蓝屏后,在vs2010中调试项目时出现该异常, 解决方法:清空C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Fi ...

  8. 怎样用jQuery拿到select中被选中的option的值

    1.首先要保证select中每一个option标签都有value属性: 2.jquery的写法 1 $('#sele').val()//这里假设select的id是sele,这样可以获取当前选中的op ...

  9. CloudStack 初始化执行命令流分析

                查询路由元素   选择可以使用的路由元素   需要将网络服务提供者的:虚拟路由和安全同时启用   { "createnetworkresponse" : { ...

  10. [C++] advanced reference

    advanced reference