C#特性 迭代器(下) yield以及流的延迟计算

2019-12-26 11:17:15王冬梅
易采站长站为您分析C#特性 迭代器(下) yield以及流的延迟计算,需要的朋友可以参考下    

从0遍历到20(不包括20),输出遍历到的每个元素,并将大于2的所有数字放到一个IEnumerable<int>中返回

解答1:(我以前经常这样做)
 

  1. static IEnumerable<int> WithNoYield()      { 
  2.       IList<int> list = new List<int>();        for (int i = 0; i < 20; i++) 
  3.       {          Console.WriteLine(i.ToString()); 
  4.         if(i > 2)            list.Add(i); 
  5.       }        return list; 
  6.     } 
?

解答2:(自从有了C# 2.0我们还可以这样做)

 

  1. static IEnumerable<int> WithYield()      { 
  2.       for (int i = 0; i < 20; i++)        { 
  3.         Console.WriteLine(i.ToString());          if(i > 2) 
  4.           yield return i;        } 
  5.     } 
?

如果我用下面这样的代码测试,会得到怎样的输出? 
测试1:

测试WithNoYield()

 

复制代码
static void Main()
        {
            WithNoYield();
            Console.ReadLine();
        }

 

测试WithYield()