尝试将列表拆分为更小的列表时出错

Error when trying to split list into smaller lists

错误:

cannot convert from 'System.Collections.Generic.List<System.Collections.Generic.IEnumerable>' to 'System.Collections.Generic.List'

代码:

 for (int i = 0; i < Speed; i++)
 {
    Tasks[i] = Task.Run(() =>
    {
       var arr_ = arr.Chunk(Total / Speed).ToList(); 
       Program.Check(arr_, Key, Current, Total, Node, Token);
    }, Token);
 }

Chunk(int)方法:

    public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> list, int chunkSize)
    {
        if (chunkSize <= 0)
        {
            throw new ArgumentException("chunkSize must be greater than 0.");
        }

        while (list.Any())
        {
            yield return list.Take(chunkSize);
            list = list.Skip(chunkSize);
        }
    }

我已经被困在这里一段时间了,没有解决办法,你们中的任何人都可以告诉我我做错了什么吗?这个想法是从一个更大的列表 (arr) 开始,然后在一个循环中将它转换成更小的 Total / Speed 大小的列表,然后将它用于另一个函数。

我对 yield return 工作原理的理解是,每次调用它时,它都应该 return 它所在循环的下一次迭代,但我不太确定这是它究竟是如何工作的,否则它看起来应该在这里工作。

感谢任何帮助,谢谢

Chunk() return 是 IEnumerable<T>IEnumerable。您正试图将其转换为 List<T>,这永远行不通。

你拿了一张清单,把它分成更小的清单,然后尝试把所有这些更小的清单放回到一个大清单中。

如果您确实打算将子列表合并回一个列表,您可以这样做:

var _list = list.Chunk(3).SelectMany(i => i).ToList();

如果您根据其 return 类型正确使用 Chunk(),它就可以正常工作,例如

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
foreach (var chunk in list.Chunk(3))
    Console.WriteLine(string.Join(", ", chunk));

产出

1, 2, 3
4, 5, 6