易采站长站为您分析C#特性 迭代器(下) yield以及流的延迟计算,需要的朋友可以参考下
static void Main()
{
WithNoYield();
Console.ReadLine();
}
从0遍历到20(不包括20),输出遍历到的每个元素,并将大于2的所有数字放到一个IEnumerable<int>中返回
解答1:(我以前经常这样做)
?
- static IEnumerable<int> WithNoYield() {
- IList<int> list = new List<int>(); for (int i = 0; i < 20; i++)
- { Console.WriteLine(i.ToString());
- if(i > 2) list.Add(i);
- } return list;
- }
解答2:(自从有了C# 2.0我们还可以这样做)
?
- static IEnumerable<int> WithYield() {
- for (int i = 0; i < 20; i++) {
- Console.WriteLine(i.ToString()); if(i > 2)
- yield return i; }
- }
如果我用下面这样的代码测试,会得到怎样的输出?
测试1:
测试WithNoYield()
复制代码
static void Main()
{
WithNoYield();
Console.ReadLine();
}
测试WithYield()










