首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq通过收集进行额外的传递。

Linq通过收集进行额外的传递。
EN

Stack Overflow用户
提问于 2014-10-30 14:58:23
回答 1查看 49关注 0票数 1

我试图更好地理解linq中的函数组合,为此,我编写了如下代码:

代码语言:javascript
复制
var x = Enumerable.Range(1, 10);

var result = x.Select(AddFive)
              .Where(FilterEvens)
              .Take(1);

result.ToList(); 

其中AddFive和FilterEvens方法定义如下:

代码语言:javascript
复制
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,我就会得到:

加五 滤波均数 加五 滤波均数 加五 滤波均数

和:

加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数 加五 滤波均数

换句话说,它看起来比它在集合中需要的更远。这是虫子吗?(我猜不是。)如果不是的话,有什么好的理由让它以这种方式实现呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-30 15:03:42

Take没有走得更远。它不断地迭代,直到找到与您的want.Since一样多的数字--有一个筛选,并不是所有的数字都被返回,因为其中一些数字不能满足condition.So,您可以看到由Select投影并由Where.过滤的每个数字的消息。

例如,在Take(2)的情况下

代码语言:javascript
复制
Select returns 6 to where - it's returned 
Select returns 7 to where - not returned
Select returns 8 to where - returned

这就是为什么你三次看到这个信息

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26656371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档