0
我在C#書中找到了這個例子,有人能解釋爲什麼當Fibs方法只需要一個列表時,你可以將Fibs方法傳遞到EvenNumbersOnly方法中?IEnumerable方法
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;
}
}
由於@alex表示您未通過該方法,而是調用該方法的erturn值。要傳遞該方法,語法如下所示:'foreach(EvenNumbersOnly(Fibs))中的int fib',沒有括號或參數值(6)。並且這是行不通的(正如你所說),因爲'EvenNumbersOnly'不能接受函數委託作爲輸入參數。 – 2013-03-23 15:04:55
好吧,我得到它,另一件事是爲什麼EvenNumbersOnly的foreach調用Fibs,我得到這個調試模式 – user1728706 2013-03-23 15:12:45
,因爲Fibs不是立即返回結果,而只是給出一個一個一個地產生int的代理對象。這是「收益率」的工作原理。 – alex 2013-03-23 15:31:37