C# 使用查询';s指数

C# 使用查询';s指数,c#,list,linq,C#,List,Linq,我有一个列表(假设它有值): 是否有可用于在Id中填充“IdNumber”的索引?如果不可能,还有其他方法吗?选择可以给出索引 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

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


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

选择可以给出索引

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

选择实施:

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);
    }
}
公共静态IEnumerable选择(此IEnumerable源,Func选择器){
if(source==null)抛出错误.ArgumentNull(“source”);
if(selector==null)抛出错误.ArgumentNull(“selector”);
返回SelectIterator(源、选择器);
}
静态IEnumerable SelectIterator(IEnumerable源、Func选择器){
int指数=-1;
foreach(源中的TSource元素){
选中{index++;}
收益率返回选择器(元素、索引);
}
}

linq中的select有其内置索引。您只需在代码中指定第二个参数

将代码的开头替换为

var output = list.Select((y, index) => new {
...
}).ToList();
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);
    }
}
var output = list.Select((y, index) => new {
...
}).ToList();