加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
110-枚举类型的迭代-迭代器.cs 1.76 KB
一键复制 编辑 原始数据 按行查看 历史
using System;
using System.Collections.Generic;
//4.6.3 迭代器
// 和foreach语句是枚举对象的使用者相对,迭代器是枚举对象的生产者。
namespace _110_枚举类型的迭代_迭代器
{
class Test
{
//本例中,我们用迭代器返回Fibonacci数列表(Fibonacci数列表的每个数字是前两个数之和):
static IEnumerable<int> Fibs(int fibCount)
{
for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++)
{
yield return prevFib; // yield return
int newFib = prevFib + curFib;
prevFib = curFib;
curFib = newFib;
}
}
static void Main(string[] args)
{
foreach (int fib in Fibs(6))
{
Console.Write(fib + " ");
}
//return语句表示该方法返回的值,而yield return语句表示从本枚举器产生的下一个元素。在每条yield语句中,元素返回给调用者,但要维护被调用者的状态,这样方法才能在调用者索取下一个元素时继续执行。
//被调用者状态的生命周期绑定在枚举器上,这样当调用者结束枚举时,状态可以被释放。
//提示:编译器迭代方法转换成实现IEnumerable<T>和/或IEnumerator<T>的私有类,迭代器的程序块逻辑在编译器写的枚举类中,被“反转”并连接MoveNext方法和Current属性。这表明当调用迭代方法时,所做的只是实例化编译器写的类,编写的代码并不真正运行。编写的代码只有在开始遍历结果序列时才真正运行,典型的如foreach语句。
Console.ReadKey();
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化