来自microsoft的LINQ示例代码...

时间:2013-05-30 14:31:22

标签: linq

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

我无法理解lambda表达式的(数字,索引)部分:

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);
    }
}

3 个答案:

答案 0 :(得分:2)

  

我无法理解lambda表达式的(数字,索引)部分:

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

之类的东西
sequence.Where((x, index) => index % 2 == 0 && x.Length > 5))

即:给我序列中的所有项目,索引和长度均匀,大于5。

在这个例子中:

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

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

答案 1 :(得分:1)

这些是lambda表达式的参数。

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

答案 2 :(得分:1)

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

bool FunctionWithNoName(string digit, int index)
{
 return (digit.Length < index);
}