0

任何人都可以解释以下来自微软的 LINQ 示例代码...

我无法理解 lambda 表达式的 ( digit, index ) 部分:

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

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

    Console.WriteLine("Short digits:");
    foreach (var d in shortDigits)
    {
        Console.WriteLine("The word {0} is shorter than its value.", d);
    }
}
4

3 回答 3

2

我无法理解 lambda 表达式的 (digit, index) 部分:

有两个重载Where。一个将序列类型的谓词映射到bool,另一个将(序列类型的实例,序列中的索引)的谓词映射对映射到 bool。这样你就可以说像

sequence.Where((x, index) => index % 2 == 0 && x.Length > 5))

即:给我序列中索引偶数且长度大于5的所有项目。

在这个例子中:

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

我们是说:给我序列中所有项长度小于其在序列中的位置的项,即所有长度小于它所代表的值的数字。

于 2013-05-30T14:35:37.583 回答
1

lambda 表达式是编写伪代码的捷径:

bool FunctionWithNoName(string digit, int index)
{
 return (digit.Length < index);
}
于 2013-05-30T14:36:15.080 回答
1

这些是 lambda 表达式的参数。

编译器将根据使用 lambda 的委托来推断它们的类型。
在这种情况下,这是Func<T, int, bool>来自Where()过载。

于 2013-05-30T14:32:54.713 回答