C#使用WHERE得到每个第n个元素,结果很奇怪

时间:2016-05-09 12:57:44

标签: c# linq

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?

2 个答案:

答案 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}");