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关键字的时候,返回类型必须是IEnumerableIEnumerable<T>IEnumeratorIEnumerator<T>

MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/9k7k7cf0.aspx

posted @ 2013-06-20 12:53  武沛齐  阅读(522)  评论(0编辑  收藏  举报