C# yield的使用方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace YieldTest_2 { class Program { static void Main(string[] args) { YieldTest y = new YieldTest(); foreach (var x in y) { Console.WriteLine(x); } } } public class YieldTest:IEnumerable<int> { public IEnumerator<int> GetEnumerator() { yield return 1; yield return 2; yield return 3; yield return 4; } IEnumerator IEnumerable.GetEnumerator() { return null; } } }
1.这个类继承自IEnumerable<T>接口,而IEnumerable<T>继承了IEnumerable,所以YieldTest类也继承IEnumerable接口,因此要实现接口方法,所以这里显示实现IEnumerable的GetEnumerator方法,返回null,因为我们一般在程序里会调用它的泛型实现.
2.Yield的作用就是当外部调用foreach的时候,每次迭代会在内部调用yield return的值,然后把控制权交给外部代码处理,下一次迭代的时候执行下一个yield,然后再把控制权交给外部.
3.Yield必须在接口方法GetEnumerator的内部使用.
上面的yield可以扩充成这样:
for(int i=0;i<4;i++) { yield return i; }
yield其实就是将实现IEnumerator接口的Current,MoveNext,Reset交给编译器去做了,省去我们大量的时间.