The result of a .Select()
call isn't evaluated until you call a method on it that forces it to be evaluated. In other words, .Select()
operations are lazily-evaluated.
All .Select()
does is return an object that holds a reference to the source
data, and a function (which you provide to it when you call .Select()
) which at some point in your program you can evaluate (for example, by calling .ToList()
, .Count()
or .Max()
on it.
If you add .ToList()
to the end of your first test you'll see the take taken increase.