4

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

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

4

2 回答 2

6

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

例子:

var result1 = myEnumerable.Where((item, index) => index < 4);
var result2 = myEnumerable.Take(4);
// result1 and result2 are equivalent.
于 2010-07-20T09:09:48.877 回答
4

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

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

var results = sequence.Where((item, idx) => idx % 2 == 0);
于 2010-07-20T09:10:02.400 回答