多参数Linq查询

时间:2012-07-04 14:17:54

标签: c# linq

以下代码给出了名称比其值短的数字。我无法理解LINQ如何理解索引应该是元素的数组索引。有人可以解释一下......

 string[] digits = { "zero", "one", "two", "three", "four", 
                     "five", "six", "seven", "eight", "nine" };

 var shortDigits = digits.Where((digit, index) => digit.Length < index);

2 个答案:

答案 0 :(得分:3)

  

我无法理解linq如何理解索引应该是元素的数组索引。

总是在呼唤the overload which takes a predicate which is given the value and the index。这就是超载的全部目的。

来自predicate参数的文档:

  

测试条件的每个源元素的函数;函数的第二个参数表示源元素的索引。

答案 1 :(得分:0)

背后没有任何魔力。 Where的特定重载在内部执行类似的操作:

var index = 0;
foreach (var item in collection)
{
    if (predicate(item, index++)) {
        yield return item;
    }
}

其中predicate是您传入的lambda,collection是数字数组。