0

この例は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;
       }    
}
4

2 に答える 2

3

IEnumerable<int>パラメータタイプが明確に述べているように、それは期待しています。また、メソッド自体ではなく、メソッドの実行結果を渡しています。

于 2013-03-23T14:59:43.997 に答える
0

コードの intMainメソッドは次と同等です。

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

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

したがってFibs、メソッドはメソッドに渡されませんEvenNumbersOnly

于 2013-03-23T16:06:19.247 に答える