我在返回行处遇到以下错误:
"Cannot implicity convert type using System.Collections.Generic.List<T> to T"
我不明白为什么会抛出这个错误,我的返回类型是IEnumerable,你能在这里看到错误吗?
public static IEnumerable<T> Batch<T>(this IEnumerable<T> collection, int batchSize)
{
List<T> nextbatch = new List<T>(batchSize);
foreach (T item in collection)
{
nextbatch.Add(item);
if (nextbatch.Count == batchSize)
{
yield return nextbatch;
nextbatch = new List<T>(batchSize);
}
}
if (nextbatch.Count > 0)
yield return nextbatch;
}
答案 0 :(得分:2)
你不是说&#34;这种方法会返回许多T&#34;的集合,你说&#34;这种方法会返回许多T&#34;。
换句话说,这就是你需要声明方法的方法:
public static IEnumerable<IEnumerable<T>> Batch<T>(...)
^---notice 2 layers---^
但是,假设此方法始终会返回您不想保留所有权的列表,那么您应该通过仅列出最佳类型来让消费者更容易:
public static IEnumerable<List<T>> Batch<T>(...)
答案 1 :(得分:0)
方法返回类型为IEnumerable<T>
,产量应返回 T 而不是List<T>
有关如何使用yield yield
的更多信息