Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
Linq的四种生成运算 DefautIfEmpty,Empty,Range,Repeat 也就是给我们初始化用的。
一:DefaultIfEmpty 【返回枚举类的类型】
1. 看注释: 返回指定序列的元素;如果序列为空,则返回单一实例集合中的类型参数的默认值。
2. 查看实例代码
static void Main(string[] args)
{
var list = new List<int>();
var query = list.DefaultIfEmpty().ToList();
}
我编译之后的结果可以看到,DefaultIfEmpty就是告诉如果集合为空,则返回一个T参数的默认值放到集合中。。。。
可以看到,最后的集合至少有一个item。
3. 探究源代码
二:Empty
我们经常初始化List的时候,该怎么做呢? var list=new List<int>();
那么现在我们linq中的生成运算有了新的方式。
var list = Enumerable.Empty<int>();
然后我们来看一下,Empty方法的源码
namespace System.Linq
{
internal class EmptyEnumerable<TElement>
{
public static readonly TElement[] Instance = new TElement[0];
}
}
可以看到:Enumerable.Empty<int>() 其实在内部生成了一个T[]数组。数组的个数为0。
三:Range 【返回枚举类的类型】
1. 生成指定范围内的整数的序列。
2. 代码
var list = Enumerable.Range(10, 100);
可以看到,上面这样的代码就避免了我们自己去执行foreach/for添加数字。
3. ILSpy源代码
四:Repeat 【返回枚举类的类型】
1. 生成包含一个重复值的序列。
2. 代码
var list = Enumerable.Repeat<int>(10, 100);
总结: 这四个生成方法,让我们避免了一些比较无聊的操作,也就提高了我们的编码效率。
还是印证了前面课程的话,要想延迟执行,必须使用枚举类类型。
Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析的更多相关文章
- Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
Linq基础操作之Select,Where,OrderBy,ThenBy源码分析 二:Select 它是延迟执行.yield有得一拼,因为他们都是生成了一个枚举类. if (source is TSo ...
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
- Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
- Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析
Linq转换操作之OfType,Cast,AsEnumerable,ToLookup源码分析 一:Tolookup 1. 从方法的注解上可以看到,ToLookup也是一个k,v的形式,那么问题来了,它 ...
- Linq特取操作之ElementAt,Single,Last,First源码分析
Linq特取操作之ElementAt,Single,Last,First源码分析 一:linq的特取操作 First/FirstOrDefault, Last/LastOrDefault, Eleme ...
- Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析
Linq扩展最后遗留之SelectMany,Zip,SequenceEqual源码分析 一: AsParallel [并行化查询] 这个函数的功效就是将计算结果多线程化.[并行计算] =>[多核 ...
- 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 ...
随机推荐
- git账户的存储
在使用git时,使用git pull,或git push,每次都要我输入用户名和密码,比较麻烦.git有个参数可以解决这个问题. 修改./git/config文件,增加 [credential] he ...
- 来谈谈 WebAssembly 是个啥?为何说它会影响每一个 Web 开发者?
作者:link 原文:What is WebAssembly and why it affects web developers! 你听说过WebAssembly吗?这是由Google, Micros ...
- C# GDI+ 实现橡皮筋技术
原文 C# GDI+ 实现橡皮筋技术 应该有很多人都在寻找这方面的资料,看看下面我做的,或许对你会有所帮助,但愿如此. 为了实现橡皮筋技术,我用了两种方法: 第一种是利用ControlPain ...
- 构建一个完整的DNS系统
人心不同 各如其面 如之奈何 如之奈何 ——引子 我们的目标很明了——构建一个具有根的.私有的DNS(Domain Name System). 这里不会陈述太多关于DNS与BIND的基础知识,如果 ...
- 11.redis连接
转自:http://www.runoob.com/redis/redis-tutorial.html Redis 客户端连接 Redis 通过监听一个 TCP 端口或者 Unix socket 的方式 ...
- Bower 使用
Bower:客户端库管理工具 来自<JavaScript 标准参考教程(alpha)>,by 阮一峰 目录 概述 常用操作 项目初始化 库的安装 库的搜索和查看 库的更新和卸载 列出所有库 ...
- 关于junit包导入不了但是maven本地库中却存在的问题
导入项目的时候发现junit的类使用不了,于是就去看看包导入了没有 发现包是灰色的,于是猜想可能是maven本地库中包没下载过来 查询了本地库发现包是存在的,这就奇怪的,经过网上查询之后得到解决方案 ...
- 用django框架开发一个B2C购物网站用户注册知识点总结2
一:用户部分: 用户注册: 用户注册序列化器: import re from django_redis import get_redis_connection from rest_framework ...
- Unmarshaller解析xml文件
参考地址:http://linbulu.iteye.com/blog/2295919 Girl.xml文件 <?xml version="1.0" encoding=&quo ...
- git服务器搭建问题
CentOS6.5本地搭建. 对于图形化的系统,可以联网,然后CTRL+ALT+F2可以切换到命令行,CTRL+ALT+F1可以切换回桌面图形化. 可以用SSH和FTP来连接服务器和传文件. (1 ...