【发布时间】:2021-10-10 22:49:44
【问题描述】:
错误:
无法从“System.Collections.Generic.List
”转换为“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 工作原理的方式是,每次调用它时,它都应该返回它所在的循环的下一次迭代,但我不太确定它到底是如何工作的,否则它看起来喜欢它应该在这里工作。
感谢任何帮助,谢谢
【问题讨论】:
-
你可能想看看 MoreLinq 的 Batch() 扩展方法。它完全符合您的要求,并且可以作为 NuGet 包使用 morelinq.github.io/2.1/ref/api/html/…
-
@EricJ。谢谢,这看起来很有帮助,如果我找不到任何其他解决方案,我会使用它,但我最好不要在这个项目中使用 NuGet 包
标签: c# arrays list winforms split