C# yield的使用方法

View Code
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交给编译器去做了,省去我们大量的时间.

posted @ 2012-12-06 10:31  Harley Hu  阅读(545)  评论(0编辑  收藏  举报