首页 > 解决方案 > 如何回到列表的开头?

问题描述

我正在尝试使用这些方法Skip()Take()从列表中获取值。但是当列表结束时,我无法回到列表的开头。

List<string> list = new List<string>();
list.Add("Duck1");
list.Add("Duck2");
list.Add("Duck3");
list.Add("Duck4");
list.Add("Duck5");

var list2 = list.Skip(4).Take(3);

foreach(var a in list2) {
  Console.WriteLine(a);
}

结果是:

我正在寻找的结果是:

标签: c#linq

解决方案


您可以编写一个方法来制作一个IEnumerable<T>循环,然后使用它。

public static IEnumerable<T> ToCircular<T>(this IEnumerable<T> source)
{
    while(true)
    {
        foreach(var x in source) yield return x;
    }
}

然后您可以执行以下操作

List<string> list = new List<string>();
list.Add("Duck1");
list.Add("Duck2");
list.Add("Duck3");
list.Add("Duck4");
list.Add("Duck5");

var list2 = list.ToCircular().Skip(4).Take(3);

foreach(var a in list2){
    Console.WriteLine(a);
}

Take但要小心,因为这会导致无限循环,并且在与orTakeWhile或一起使用时要限制它First


推荐阅读