任何人都可以从微软解释以下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);
}
}
答案 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);
}