28.yield return 语法

一、yield return

  该语句可以实现在 foreach 循环中,在其他方法边遍历边输出。如下:

    class Program
    {
        private List<int> list = new List<int>();
        //给集合添加元素
        private void Dimo()
        {
            for (int i = 0; i < 11; i++)
            {
                list.Add(i);
            }
        }
        //输出偶数(一般方法无法实现一边遍历一边在其他方法中输出,
        //在其他方法中只能输出最后的结果。如下)
        IEnumerable<int> GetAllEvenNumber()
        {
            Dimo();
            List<int> result = new List<int>();
            foreach (int item in list)
            {
                if (item%2 == 0)
                {
                    result.Add(item);
                }
            }
            return result;
        }
        //使用 yield return 算法
        IEnumerable<int> GetAllEventNumberByYieldReturn()
        {
            Dimo();
            foreach (int item in list)
            {
                if (item%2 == 0)
                {
                    yield return item;
                }
            }
            yield break;
        }
        //方法测试
        private void Test()
        {
            Console.WriteLine("一般方法测试:");
            foreach (int item in GetAllEvenNumber())
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("yield return 方法测试:");
            foreach (int item in GetAllEventNumberByYieldReturn())
            {
                Console.WriteLine(item);
            }
        }
        static void Main(string[] args)
        {
            Program obj = new Program();
            obj.Test();
            Console.ReadKey();
        }
    }
-- 输出结果 --

一般方法测试:
0
2
4
6
8
10
yield return 方法测试:
0
2
4
6
8
10
0
2
4
6
8
10

解析:

  一般方法是把结果全部加载到内存中再遍历,而 yield return 方法则是边遍历边输出。

 

上一篇:生成器、迭代器、模块(time、random、json pickle)


下一篇:sleep()、wait()、join()、yield()的区别