IEnumerable方法

时间:2013-03-23 14:57:45

标签: c#

我在C#书中找到了这个例子,有人可以解释为什么你只需要一个列表就可以将Fibs方法传递给EvenNumbersOnly方法?

static void Main()
{
    foreach (int fib in EvenNumbersOnly (Fibs(6)))
        Console.WriteLine (fib);
}

static IEnumerable<int> Fibs (int fibCount)
{
   for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++)
   { 
        yield return prevFib;
        int newFib = prevFib+curFib;
        prevFib = curFib;
        curFib = newFib;
   }
}

static IEnumerable<int> EvenNumbersOnly (IEnumerable<int> sequence)
{
   foreach (int x in sequence)
       if ((x % 2) == 0) {
        yield return x;
       }    
}

2 个答案:

答案 0 :(得分:3)

它期望IEnumerable<int>,因为参数类型明确指出。并且您传递的是执行方法的结果,而不是方法本身。

答案 1 :(得分:0)

代码int Main方法等同于:

static void Main()
{
    IEnumerable<int> values = Fibs(6);

    foreach (int fibValue in EvenNumbersOnly(values))
        Console.WriteLine (fibValue);
}

因此Fibs方法未传递给EvenNumbersOnly方法。