В следующем тесте:
int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Func<int, int> boom = x => { Console.WriteLine(x); return x; };
var res = data.Select(boom).Skip(3).Take(4).ToList();
Console.WriteLine();
res.Select(boom).ToList();
Результат:
1
2
3
4
5
6
7
4
5
6
7
По существу, я заметил, что в этом примере Skip()
и Take()
работают хорошо, Skip()
не так ленив, как Take(). Кажется, что Skip()
все еще перечисляет элементы, пропущенные, даже если они не возвращают их.
То же самое относится, если я сначала Take()
. Мое лучшее предположение состоит в том, что ему нужно перечислить, по крайней мере, первый пропустить или принять, чтобы посмотреть, куда идти со следующей.
Почему он это делает?