对“yield”关键字的个人理解

2021-03-31  本文已影响0人  夜藍

上代码:

class Program

    {

        static void Main(string[] args)

        {

            //var list = Power(2, 8).ToList();

            var list = Power(2, 8);

            foreach (int i in list)

            {

                Console.Write("{0} \r\n", i);

            }

            Console.ReadKey();

        }

        public static IEnumerable<int> Power(int number, int exponent)

        {

            int result = 1;

            for (int i = 0; i < exponent; i++)

            {

                result = result * number;

                yield return result;

            }

            //Thread.Sleep(1000);

            yield return 3;

            //Thread.Sleep(1000);

            yield return 4;

            //Thread.Sleep(1000);

            yield return 5;

        }

    }

执行结果:

如图:当取消睡眠代码注释时,前面2到256瞬间输出,而输出3、4、5都等待了1秒。若同时在list后面加ToList()方法后,会立即执行所有返回值,耗时3秒多,反之瞬间执行完成。

结论:每个yield return可以理解为一个待执行方法,当调用到这个对象时才执行,而且这个“执行方法”作用域是上一个yield到当前yield之间。

上一篇 下一篇

猜你喜欢

热点阅读