yield

简介:

关键词:延迟、当前位置保留、IEnumerable

例:

复制代码
        static void Main(string[] args)
        {
            IEnumerable ie = funyield();
            foreach (string s in ie)
            {
                Console.WriteLine(s);
            }
            Console.ReadKey();
        }
        public static IEnumerable funyield()
        {
            yield return "ff";
            yield return "DD";
            yield return "bb";
        }
复制代码

1.延迟
当Main函数执行时,执行完IEnumerable ie=funyield();语句后,实际根本没有执行funyield方法,当之后对其进行迭代的时候才会去执行。
一旦我们在一个返回类型为IEnumerable或IEnumerable<T>的方式中通过yield return 返回集合元素,意味着这个方法中的操作会被”延后执行“---操作的真正执行不是发生在调用时候,而是延后到对返回的集合进行迭代的时候。

2.保留位置
对上述代码 打断点,再执行时会发发现,foreach每次的迭代都要去执行funyield方法,并且一次执行返回的数据,第一次执行返回 ff ,保留位置,下次再迭代的时候就要从下一个开始,即执行返回 DD

3.IEnumerable
在使用yield关键字的时候,返回类型必须是IEnumerableIEnumerable<T>IEnumerator或 IEnumerator<T>

MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspx


本文转自武沛齐博客园博客,原文链接:http://www.cnblogs.com/wupeiqi/p/3145780.html,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
Java 调度
线程的yield操作
线程的yield操作的作用是让出目前正在执行的线程放弃当前的执行,让出CUP权限,使得CPU去执行其他的线程。处于让步状态的JVM层面的线程状态仍然是RUNNABLE状态,但是该线程所对应的操作系统层面的线程从状态上来说会从执行状态编程就绪状态。线程yield时,线程放弃和重占CPU的时间是不确定的,可能是刚刚放弃CPU,马上又获得CPU执行权限,重新开始执行。
30 0
|
1月前
|
设计模式 编解码 程序员
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
78 1
探索 C++ 20 (co_await、co_yield 和 co_return)协程基本框架的使用
|
4月前
|
JavaScript 容器
generator 和 yield的使用
generator 和 yield的使用
20 0
|
前端开发
for await 循环
for await 循环
170 0
|
Java 调度
Java线程方法-执行(join) ,礼让(yield)
Java线程方法-执行(join) ,礼让(yield)
111 0
|
测试技术 数据库连接 数据库
pytest(7)-yield与终结函数
通过上一篇文章,我们已经知道了pytest中,可以使用Fixture来完成运行测试用例之前的一些操作如连接数据库,以及测试执行之后自动去做一些善后工作如清空脏数据、关闭数据库连接等。 我们已经学会了fixture函数的简单用法,但其实fixture还提供了两种非常优雅高效的写法,来完成测试执行前的处理操作与执行后的处理操作,即使用yield或addfinalizer来实现。
pytest(7)-yield与终结函数
|
C# 索引
C#中的yield
C#中的yield
87 0
|
监控 调度
线程方法:sleep( )、wait()、join( )、yield( )的区别
线程方法:sleep( )、wait()、join( )、yield( )的区别
369 0
|
存储 开发框架 .NET
关于C# yield 你会使用吗?
假设有这样一个需求:在一个数据源(下面代码arry)中把其中大于4的数据取出来遍历到前台,怎么做?(不使用linq)
175 0
|
自然语言处理 调度
多线程 Thread.yield 方法到底有什么用?
概念 我们知道 start() 方法是启动线程,让线程变成就绪状态等待 CPU 调度后执行。 那 yield() 方法是干什么用的呢?来看下源码。