我写了一个扩展方法并实现了一些东西 - 它有一个没有返回路径的情况。鉴于下面的扩展方法,它将IEnumerable
集合分解为较小的集合。因此,如果我给它一个包含429个元素的集合并传入一个100的块大小。然后我会得到一个集合大小的集合:100,100,100,100,29。
现在,如果我传入一个空集合怎么办?永远不会输入while循环,因为Any()不会返回true。在调试时,我发现返回的对象是一个空的IEnumerable
集合。为什么是这样?为什么它不为空?为什么没有可能没有返回路径的方法抛出编译器错误?
以下是有问题的方法:
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize)
{
while (source.Any())
{
yield return source.Take(chunksize);
source = source.Skip(chunksize);
}
}