Linq扩展方法SkipWhile和lambda exp,c#

时间:2013-02-04 08:54:34

标签: c# linq lambda

我对此示例代码有一点误解:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

var laterNumbers = numbers.SkipWhile((n, index) => n >= index);

“n”表示数组元素。 “index”表示元素的索引。

问题:我们怎么知道index参数完全代表索引而不是元素本身?

编辑:

好的,我明白了。 SkipWhile只有2个重载,编译器决定使用哪个是否有一个或两个输入参数。

错误的问题)

2 个答案:

答案 0 :(得分:1)

数组不必是整数数组。例如,如果它是一个字符串数组,那么差别很明显,因为你不能以相同的方式使用它们:

string[] strings = { "The", "quick", "brown", "fox", "jumps", 
                  "over", "the", "lazy", "dog"};
// in the lambda "n" is a string, and "index" is an integer
var laterStrings = strings.SkipWhile((n, index) => n.Length >= index);

答案 1 :(得分:0)

此扩展方法只有两个重载,区别仅在于它们所采用的谓词。 One predicate采用单个值(可枚举中的项),the other获取枚举中的项和表示索引的int。

没有混淆。如果谓词有两个参数,那么第二个是索引。如果只传递一个参数,那么它必须是可枚举的项目。