请解释System.Linq.Enumerable.Where(Func <t,int,=“”bool =“”>谓词)</t,>

时间:2010-07-20 09:04:35

标签: c# linq extension-methods ienumerable enumerable

对于接受带有两个参数的谓词的Where方法的重载,我无法理解MSDN文档,其中int,据说代表源元素的索引,无论这意味着什么(我认为是enumerable是一个序列,你看不到下一个项目,更不用说它的索引了。)

有人可以解释一下如何使用这个重载,特别是Func中的int是什么以及如何使用它?

2 个答案:

答案 0 :(得分:6)

int参数表示当前迭代中当前项的索引。每次调用其中一个LINQ扩展方法时,理论上你都不能保证以相同的顺序返回项目,但是你知道它们都会被返回一次,因此可以分配索引。 (嗯,如果你知道查询对象是List<T>或类似的,你就可以保证,但一般情况下都不行。)

示例:

var result1 = myEnumerable.Where((item, index) => index < 4);
var result2 = myEnumerable.Take(4);
// result1 and result2 are equivalent.

答案 1 :(得分:4)

您不能以与数组相同的方式索引IEnumerable<T>,但您可以使用索引以某种方式过滤列表,或者可能索引另一个集合中的某些数据将在条件中使用。

编辑:例如,要跳过您可以使用的所有其他元素:

var results = sequence.Where((item, idx) => idx % 2 == 0);