无法将List <t>隐式转换为T.

时间:2017-11-06 10:12:25

标签: c# generics

我在返回行处遇到以下错误:

"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;
    }

2 个答案:

答案 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

的更多信息