C#迭代器
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyIterator { class Program { static readonly String Padding = new string(' ',30); static IEnumerable<Int32> CreateEnumerable() { Console.WriteLine("{0} CreateEnumerable()方法开始", Padding); for (int i = 0; i < 3; i++) { Console.WriteLine("开始 yield{0}", i); yield return i; Console.WriteLine("{0}yield 结束", Padding); } Console.WriteLine("{0} Yielding最后一个值", Padding); yield return -1; Console.WriteLine("{0} CreateEnumerable()方法结束", Padding); } static void Main(string[] args) { IEnumerable<Int32> iterable = CreateEnumerable(); IEnumerator<Int32> iterator = iterable.GetEnumerator(); Console.WriteLine("开始迭代"); while (true) { Console.WriteLine("调用MoveNext方法……"); bool result = iterator.MoveNext(); Console.WriteLine("MoveNext方法返回的{0}",result); if (!result) { break; } Console.WriteLine("获取当前值……"); Console.WriteLine("获取到的当前值为{0}",iterator.Current); } } } } ----------------------------------------------------------------------------- 1.直到第一次调用MoveNext,CreateEnumerable中的方法才被调用。 2.在调用MoveNext的时候,已经做好了所有操作,返回Current属性并没有执行任何代码。 3.代码在yield return之后就停止执行,等待下一次调用MoveNext方法的时候继续执行。 4.在方法中可以有多个yield return语句。 5.在最后一个yield return执行完成后,代码并没有终止。调用MoveNext返回false使得方法结束。
相关推荐
-
StringPlus 字符串拼接操作类 csharp
2019-1-7
-
.NET Core 使用RSA算法 加密\解密\签名\验证签名 csharp
2019-1-8
-
NPOI 导入Excel csharp
2019-1-7
-
生成html水印,兼容ie8,ie兼容性问题与解决办法 csharp
2019-1-7
-
C#串口通信扫码枪数据读取 csharp
2019-1-7
-
Log4net 集成到MVC+EF框架 csharp
2019-1-7
-
通用验证类 csharp
2019-1-7
-
控件移动,触碰边缘改变方向 csharp
2019-1-7
-
C# 并行队列 生产者消费者demo csharp
2019-1-7
-
将一个数字转换为对应中文大写的正则表达式实现,非常简洁 csharp
2019-1-7