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 ...
随机推荐
- 浅谈Java引用和Threadlocal的那些事
这篇文章主要介绍了Java引用和Threadlocal的那些事,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1 背景 某一天在某一个群里面的某个群友突然提出了一个问 ...
- vs2012应用程序的打包和图标设置
最近用VS2010+QT做了一个小软件,为了把它打包发布,查了很多资料,现在总结下,便于以后查看. 本方法不限于VS2010,也不限于QT,只要你运行你的代码得到exe之后,都可以参照本方法进行. 参 ...
- Linux启动流程【转载】
探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程. 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制 ...
- 关于Web项目出现懒加载异常的解决方案
manytomany关系中,使用 fetch = FetchType.LAZY 来做懒加载,加快些性能.但是却一直出错,原因是session被关闭,要保持session,需要事务. Hibernate ...
- Console2支援中文顯示的正式設定法
1.用regedit找到HKEY_CURRENT_USER\Console,把底下的Console2 command window機碼給砍了.2.Console2的View功能表中,有個Console ...
- MyBatis 体系结构
- 前端开发之CSS篇二
主要内容: 一.CSS的继承性和层叠性 二.盒模型 三.padding属性 四.border属性 五.margin属性 六.标准文档流 七.行内元素和块状元素转换 1️⃣ CSS的继承性和层叠性 1 ...
- java tomcat报错: Starting Tomcat v7.0 Server at localhost' has encountered a problem问题
运行web项目的时候出现下面错误: 出现这个问题的原因是 这个tomcat在其他项目中正在运行 关掉即可.
- Python_12-线程编程
1.1 Python中的线程使用1.1.1 函数式1.2 创建threading.Thread的子类来包装一个线程对象1.2.1 threading.Thread类的使用1.3 线程 ...
- Mysql 查询今天的某些时间之外的数据
SELECT * FROM `attendancealert` WHERE DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(`AlertTime`)),'%Y-%m- ...