C# 检索通用列表项索引

C# 检索通用列表项索引,c#,linq,lambda,C#,Linq,Lambda,我有一个清单如下。我想检索所有值为1的项的索引 List<int> listFilter = new List<int>(); listFilter.Add(1); listFilter.Add(0); listFilter.Add(0); listFilter.Add(1); 谢谢 问候,, Balan Sinniah问题在于,在初始的Select子句中,您返回了一个匿名类型。要返回该值

我有一个清单如下。我想检索所有值为1的项的索引

        List<int> listFilter = new List<int>();

        listFilter.Add(1);
        listFilter.Add(0);
        listFilter.Add(0);
        listFilter.Add(1);
谢谢

问候,,
Balan Sinniah

问题在于,在初始的
Select
子句中,您返回了一个匿名类型。要返回该值,您需要额外的
选择
,稍后再过滤回该值

var val = listFilter
  .Select((value, index) => new { Value = value, Index = index })
  .Where(item => item.Value == 1)
  .Select(item => item.Index)
  .ToList();

问题在于,在初始的
Select
子句中,您返回了一个匿名类型。要返回该值,您需要额外的
选择
,稍后再过滤回该值

var val = listFilter
  .Select((value, index) => new { Value = value, Index = index })
  .Where(item => item.Value == 1)
  .Select(item => item.Index)
  .ToList();

不需要第一次选择。listFilter.Where(value=>value==1)。Select((value,index)=>index)。ToList()是相同的。@samjudson这也是我的第一个想法,但当我尝试它时,我得到的答案是0,1,而不是0,3。问题是where()创建了一个只有2个条目的新枚举,当我们从中选择索引时,我们得到0,1。第一个选择需要从原始列表中捕获索引。啊,是的,因为Where创建了一个新列表,所以第二个索引是第二个列表中的索引,而不是第一个列表中的索引。我错了。不需要第一个选择。listFilter.Where(value=>value==1)。Select((value,index)=>index)。ToList()是相同的。@samjudson这也是我的第一个想法,但当我尝试它时,我得到的答案是0,1,而不是0,3。问题是where()创建了一个只有2个条目的新枚举,当我们从中选择索引时,我们得到0,1。第一个选择需要从原始列表中捕获索引。啊,是的,因为Where创建了一个新列表,所以第二个索引是第二个列表中的索引,而不是第一个列表中的索引。我的错误。