using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
List<int> list = new List<int>();
for(int i = 0; i < 16; ++i) list.Add(i);
Console.WriteLine(string.Join(" ", list.Where((o, i) => i % 4 == 0).Select((o, i) => i).ToArray()));
}
}
有人可以解释一下,为什么上面的代码会返回0 1 2 3而不是0 4 8 12?
答案 0 :(得分:2)
因为您正在选择索引而不是值。试试这个:
Console.WriteLine(string.Join(" ", list.Where(o =>o % 4 == 0).Select((o, i) => o).ToArray()));
如果您不打算对索引执行任何操作,请执行以下操作:
Console.WriteLine(string.Join(" ", list.Where(o => o % 4 == 0).ToArray()));
答案 1 :(得分:1)
您可以先构建匿名类型记住索引:
list.Select((item, index) => new { Item = item, Index = index})
.Where(o => o.Index % 4 == 0)
.Select(o => $"Item {o.Item} at index {o.Index}");