对于接受带有两个参数的谓词的Where方法的重载,我无法理解MSDN文档,其中int,据说代表源元素的索引,无论这意味着什么(我认为是enumerable是一个序列,你看不到下一个项目,更不用说它的索引了。)
有人可以解释一下如何使用这个重载,特别是Func中的int是什么以及如何使用它?
答案 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);