1

以下代码给出了名称短于其值的数字。我不明白 LINQ 如何理解索引应该是元素的数组索引。谁能解释我...

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

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

2 回答 2

3

我不明白 linq 如何理解索引应该是元素的数组索引。

它总是调用带有谓词的重载,该谓词总是给定value 和 index。这就是过载的全部目的。

predicate参数的文档中:

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

于 2012-07-04T14:19:41.063 回答
0

背后没有魔法。这个特定的重载在Where内部做这样的事情:

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

predicate你传入的 lambda 是数字collection数组。

于 2012-07-04T14:20:41.170 回答