• yield return简单示例


         List<int> list = new List<int>()
            {
                1,2,3,4
            };
            // 需求:返回所有大于n的数
    
            // 方法1(不使用yield return)
            IEnumerable<int> WithoutYield(List<int> list, int n)
            {
                List<int> result = new List<int>();
                foreach (int i in list)
                {
                    if (i > n)
                    {
                        result.Add(i);
                    }
                }
                return result;
            }
    
            // 方法2(使用yield return)
            IEnumerable<int> UseYieldReturn(List<int> list, int n)
            {
                foreach (int i in list)
                {
                    if (i > n)
                    {
                        yield return i;
                    }
                }
            }
           // 调用
            void Call()
            {
                foreach (int i in WithoutYield(list, 2))
                {
                    Console.WriteLine(i + "without yield");
                }
    
                foreach (int i in UseYieldReturn(list, 2))
                {
                    Console.WriteLine(i + "with yield");
                }
            }

    区别:方法1是先将所有大于n的数加载到内存中

         方法2是每调用一次返回一个值,是按需供给

    结论:想得到一个IEnumerable<T>类型的集合,但是又不想一次性将数据加载到内存中,则可以使用yield return 实现按需供给

    通俗理解:yield return以后,下次再调用这个方法,则从上次 yield return的地方继续执行(上次yield return之前的代码 在这次调用中不执行了~~)。

    使用yield break,可以退出迭代。

    
    
  • 相关阅读:
    Linux快速入门(七)效率工具(Vim)
    SQLILABS(Less6)
    SQLILABS(Less5)
    SQLILABS(Less1)
    Linux快速入门(八)效率工具(SSH)
    SQLILABS(Less2)
    SQLILABS(Less4)
    【Leetcode】768. 最多能完成排序的块 II
    SQLILABS(Less7)
    SQLILABS(Less3)
  • 原文地址:https://www.cnblogs.com/FangZhaohu/p/5410777.html
Copyright © 2020-2023  润新知