示例来源 :msdn
参考:https://msdn.microsoft.com/zh-cn/library/dscyy5s0(v=vs.110).aspx
使用匿名方法、迭代器和部分选件类创建简洁的代码:https://msdn.microsoft.com/zh-cn/magazine/cc163682(en-us).aspx
有关所有迭代器:http://blogs.msdn.com/b/wesdyer/archive/2007/03/23/all-about-iterators.aspx
http://blog.csdn.net/loveyou128144/article/details/4795769
1.0 迭代器
简单的迭代器:
public static void Main(string[] args)
{
foreach (int number in EvenSequence(5, 18))
{
Console.Write(number.ToString() + " ");
}
Console.ReadKey();
}
static IEnumerable<int> EvenSequence(int firstNumber, int lastNumber)
{
// Yield 偶数的范围.
for (int number = firstNumber; number <= lastNumber; number++)
{
if (number % 2 == 0)
{
yield return number;
}
}
}
foreach,而不是直接操作枚举数。
枚举数可用于读取集合中的数据,但不能用于修改基础集合。
MoveNext 方法将枚举数提前到集合的第一个元素。
Current 设置为下一个元素。
MoveNext。
如果对集合进行更改(如添加、修改或删除元素),则枚举数将失效且不可恢复,而且其行为是不确定的。
枚举数没有对集合的独占访问权;因此,从头到尾对一个集合进行枚举在本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全,可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。