以下代码给出了名称比其值短的数字。我无法理解LINQ如何理解索引应该是元素的数组索引。有人可以解释一下......
string[] digits = { "zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine" };
var shortDigits = digits.Where((digit, index) => digit.Length < index);
答案 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
是数字数组。