以下示例中的index
如何获取其值?我理解n是从源numbers
自动获得的,但是,虽然含义很明确,但我没有看到索引是如何赋值的:
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
TakeWhile
的签名是:
public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
答案 0 :(得分:4)
此版本的TakeWhile提供序列中源元素的索引作为谓词的第二个参数。即谓词被称为谓词(5,0),然后是谓词(4,1),谓词(1,2),谓词(3,3)等。参见the MSDN documentation。
还有一个“更简单”的函数版本,仅提供序列中的值,请参阅MSDN。
答案 1 :(得分:2)
索引是由TakeWhile
的实现生成的,可能看起来有点像this。
答案 2 :(得分:1)
只要您弄清楚TakeWhile的实施方式,事情就会变得清晰:
public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate)
{
int index = 0;
foreach (TSource item in source)
{
if (predicate(item, index))
{
yield return item;
}
else
{
yield break;
}
index++;
}
}