上述 linq 查询中的索引是什么?
它是正在处理的元素的索引。因此,第一个元素 (5) 的索引为 0,第二个元素 (4) 的索引为 1,依此类推。
它如何从数组中获取索引?
这就是重载的Select
作用:
selector 的第一个参数表示要处理的元素。selector 的第二个参数表示源序列中该元素的从零开始的索引。例如,如果元素的顺序已知并且您想对特定索引处的元素执行某些操作,这将很有用。如果您想检索一个或多个元素的索引,它也很有用。
虽然真正的实现Select
有点复杂(我相信)它在逻辑上实现有点像这样:
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector)
{
// Method is split into two in order to make the argument validation
// eager. (Iterator blocks defer execution.)
if (source == null)
{
throw new ArgumentNullException("source");
}
if (selector == null)
{
throw new ArgumentNullException("selector");
}
return SelectImpl(source, selector);
}
private static IEnumerable<TResult> SelectImpl<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, int, TResult> selector)
{
int index = 0;
foreach (TSource item in source)
{
yield return selector(item, index);
index++;
}
}