使用yield关键字来提高性能

时间:2022-11-13 23:30:51

比如我们在开发当中往往会遇到这样的问题:

        public List<string> FindBobs(string [] names)        

    {            

                 List<string> bobs = new List<string>();

                 foreach (var currName in names)            

      {                

        if (currName == "Bob")                    

        bobs.Add(currName);            

      }            

        return bobs;        

   }

以上是传统做法.

方法改进:

        public IEnumerable<string> FindBobsA(IEnumerable<string> names)
        {
            foreach (string currName in names)
            {
                if (currName == "Bob")
                    yield return currName;
            }
        }

我们将返回类型改为IEnumerable,并且我们使用”yield return”.注意我再也不需要创建一个List<string>

传统的执行方法

  1. 调用函数
  2. 函数执行并返回list
  3. 调用部分使用返回的list

yield 的执行方法

  1. 调用函数
  2. 调用者请求item
  3. 下一个item返回
  4. 回到步骤2

我们最终只需要一次“弹出”一个item,而不是创建整个list并返回.