请解释System.Linq.Enumerable.Where(Func predicate)

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

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

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

例:

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

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

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

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