学习笔记: yield迭代器
yield 与 IEnumerable<T> 结对出现, 可实现按需获取 , 迭代器模式
static void Main(string[] args)
{
try
{
{
//Console.WriteLine("***************Collection**************");
CollectionDemo.Show();
}
{
Console.WriteLine("*******************Yield********************");
YieldDemo yieldDemo = new YieldDemo();
foreach (var item in yieldDemo.Power())
{
Console.WriteLine(item);//按需获取,要一个拿一个
if (item > 100)
break;
}
Console.WriteLine("*******************************************");
foreach (var item in yieldDemo.Common())
{
Console.WriteLine(yieldDemo.Common().Count());//先全部获取,然后一起返还
if (item > 100)
break;
}
}{
List<string> fruits =
new List<string> { "apple", "passionfruit", "banana", "mango",
"orange", "blueberry", "grape", "strawberry" };IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
foreach (var item in query)//遍历才会去查询比较 迭代器 yield
{}
IQueryable<string> queryable = fruits.AsQueryable<string>().Where(s => s.Length <6);
foreach (var item in queryable)//表达式目录树的解析,延迟到遍历的时候才去执行 EF的延迟查询
{}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
public class YieldDemo
{
public IEnumerable<int> Power()
{
for (int i = 0; i < 10; i++)
{
yield return this.Get(i);
//yield return this.Get(i);//Console.WriteLine("这里再来一次");
//yield return this.Get(i) + 1;
}
}public IEnumerable<int> Common()
{
List<int> intList = new List<int>();
for (int i = 0; i < 10; i++)
{
intList.Add(this.Get(i));
}
return intList;
}private int Get(int num)
{
Thread.Sleep(2000);
return num * DateTime.Now.Second;
}}
public static class ExtendMethod
{
public static IEnumerable<T> ElevenWhere<T>(this IEnumerable<T> source, Func<T, bool> func)
{
if (source == null)
{
throw new Exception("source is null");
}
if (func == null)
{
throw new Exception("func is null");
}
foreach (var item in source)
{
if (func.Invoke(item))
{
yield return item;
}
}
}
}
转载于:https://www.cnblogs.com/xtxtx/p/9207205.html
学习笔记: yield迭代器相关推荐
- python3学习笔记10(迭代器和生成器)
参考http://www.runoob.com/python3/python3-iterator-generator.html 迭代器 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束 ...
- Python学习笔记之迭代器与生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- C# 学习笔记:迭代器
C#中,如果实现遍历一个数组,除了for循环,还可以是foreach循环.在foreach循环中,我们只需要创建一个同类型的值,来表示我们遍历后的值就可以了.但是实际上,只有实现了IEnumerabl ...
- python学习笔记之迭代器
# 迭代器的概念# 迭代器协议 -- 内部含有__next__和__iter__方法的就是迭代器 # 迭代器协议和可迭代协议# 可以被for循环的都是可迭代的# 可迭代的内部都有__iter__方法# ...
- 【C++学习笔记】迭代器和数组
一.迭代器 在string对象或vector对象中我们可以使用下标运算符来访问其中的字符,除此外,还有一种更通用的机制也可以实现这样的目的,即迭代器(iterator). 1.1 使用迭代器 ...
- OpenMesh学习笔记4 迭代器和循环器
迭代器和循环器 迭代器 OpenMesh提供了遍历网格元素(点,半边,边,面)的迭代器. 所有的迭代器都定义在命名空间OpenMesh::Iterators中的模板类,需要一个具体的网格对象(即已经初 ...
- 设计模式学习笔记汇总目录
这里的学习笔记包含JavaSE和J2EE两部分,持续更新中! 其中关于学习的参考资料如下: 1.菜鸟设计模式 2.Head First Design Patterns(书.强烈推荐); 3.大话设计模 ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- java it_关于 Java Iterator(迭代器)学习笔记
相信 "迭代" 对于Java程序员来说并不陌生(当然,其他语言的程序员也是如此),在处理数据时,不可避免地会存在对数据的大量遍历操作.对于我自己而言,学习使用Java语言两年时间, ...
- QT学习笔记(九):遍历容器-迭代器(iterators)
QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...
最新文章
- php 实现一致性hash 算法 memcache
- 【杂谈】有三AI知识星球最近都GAN了哪些内容?
- 修改了一下voddown.py
- 实现日志管理的两种方式:aop、拦截器
- 每日一题:leetcode1128.等价多米诺骨牌对数
- stlink 升级固件以后失败_ST-Link不能下载程序的几种解决办法
- windows复制文件到 vmware centos虚拟机问题
- SPFieldLookupValue
- 大数据挖掘有哪些技术
- Apache APR可移植运行库简介(4)
- python文本框_Python GUI-在文本框中插入文本
- iPhone/iPad/Android UI尺寸规范 手机尺寸
- SAN 光纤交换机配置zone实验
- [译]const T vs. T const ——Dan Saks 【翻译】
- [CTO札记]新产品出现时,要‘耐得住寂寞,抗得住压力’
- 织梦免费网站模板手机端无法更新的原因及解决
- win10-gvim安装vim-airline后状态栏乱码,而且箭头显示不出来
- 发票管理系统java_企业发票管理系统.doc
- 教会微信:突破文件发送100M限制
- 标称型和数值型的区别
热门文章
- idea的文件可以mysql运行吗,终于将tiny-sdpm+intellij idea+mysql+jettyt运行成功
- mysql 使用gzip 压缩 文件,本地对 gzip 压缩的文件解压缩
- SpingMVC 注解@RequestMapping、@SuppressWarnings、@Scheduled 定时器
- 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_13-MongoDb入门-数据库和集合...
- 阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
- MFC在一个工程中启动其他工程的exe文件
- python学习笔记(十二)-- if __name__ == '__main__'
- SQL datediff()函数 时间差
- 自己做了个微信小程序
- Spark standalone运行模式(图文详解)