使用yield关键字来提高性能

时间:2023-03-09 09:20:21
使用yield关键字来提高性能

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

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并返回.