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关键字的时候,返回类型必须是IEnumerable、IEnumerable<T>、IEnumerator或 IEnumerator<T>
MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspx