使用查询的索引在linq select语句中填充列表

时间:2018-06-27 08:58:52

标签: c# list linq

我有一个列表(假设它具有值):

var IdNumber = new List<string>();

我有一个linq:

var output = list.Select(y => new {
Id = IdNumber[index],
Name = y.Name,
}).ToList();

是否存在可用于在ID中填充“ IdNumber”的索引?如果不可能,还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

选择可以给出索引。

var output = list.Select((y,index) => new {
Id = IdNumber[index],
Name = y.Name,
}).ToList();

基本演示:

public static void Main()
{
    var list = new[]{"abc","abc","abc"};

    foreach (var item in list.Select((x,i)=>x[i]))
        Console.WriteLine(item);
}

输出

a
b
c

Try it online!

选择实现:

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector) {
    if (source == null) throw Error.ArgumentNull("source");
    if (selector == null) throw Error.ArgumentNull("selector");
    return SelectIterator<TSource, TResult>(source, selector);
}

static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector) {
   int index = -1;
       foreach (TSource element in source) {
          checked { index++; }
          yield return selector(element, index);
    }
}

source

答案 1 :(得分:0)

linq中的

select具有内置索引。您只需要在代码中指定第二个参数即可。

将代码的开头替换为

var output = list.Select((y, index) => new {
...
}).ToList();