我是想更好地了解LINQ的功能组成,该效果做额外的传球,我写这样的代码:的LINQ采取措施,通过收集
var x = Enumerable.Range(1, 10);
var result = x.Select(AddFive)
.Where(FilterEvens)
.Take(1);
result.ToList();
凡AddFive和FilterEvens方法定义如下:
int AddFive(int n)
{
Console.WriteLine("Adding five");
return n+5;
}
bool FilterEvens(int n)
{
Console.WriteLine("Filtering evens");
return n%2 == 0;
}
如果我拿1并运行它,我得到以下结果这正是我所期望的:
新增五个
过滤找齐
如果我尝试采取2或5然而,我得到:
新增五个
过滤找齐
新增五个
过滤找齐
新增五
Filtering evens
和:
新增五个
过滤找齐
新增五个
过滤找齐
新增五个
过滤找齐
新增五个
过滤找齐
新增五个
过滤找齐
添加五个
过滤找齐
新增五个
过滤找齐
新增五个
过滤找齐
新增五个
过滤找齐
换句话说,它看起来像采取进一步去比它需要在集合。这是一个错误吗? (我猜这不是)。如果不是这样,那么为什么以这种方式实现它有一些很好的理由吗?
它只是预期。试着在'.Range(2,10)'上拍'(1)',你会看到两个项目被投影和过滤。:)在所有先前的转换之后,'Take'将会像从序列*中指定的一样多的项目*。 – 2014-10-30 15:03:26