IEnumerable methods
本文关键字:methods IEnumerable | 更新日期: 2023-09-27 18:05:21
我在一本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;
}
}
它期望IEnumerable<int>
,正如参数类型明确指出的那样。你传递的是执行方法的结果,而不是方法本身。
int Main
方法的代码相当于如下:
static void Main()
{
IEnumerable<int> values = Fibs(6);
foreach (int fibValue in EvenNumbersOnly(values))
Console.WriteLine (fibValue);
}
所以Fibs
方法没有传递给EvenNumbersOnly
方法。