我正在编写一个库函数,将枚举拆分为多个枚举跨度,但linq Select子句中的枚举器遇到了一个无法解释的问题。请参阅下面的代表性代码示例和输出。
这个
闻起来像
一个结构枚举器问题,但我永远无法确定问题所在,从而解决它。
非常感谢您的帮助!
class Program
{
private static IEnumerable<IEnumerable<T>> wrap<T>(IEnumerable<T> collection)
{
return wrapped();
IEnumerable<IEnumerable<T>> wrapped()
{
Console.Write($"{collection.Count()} items: ");
using (var etor = collection.GetEnumerator())
{
if (!(etor is object)) throw new Exception();
yield return inner();
IEnumerable<T> inner() { while (etor.MoveNext()) yield return etor.Current; }
}
}
}
static void Main(string[] args)
{
var c1 = Enumerable.Range(0, 5);
var c2 = Enumerable.Range(0, 5).Select(x => x);
var c3 = Enumerable.Range(0, 5).Select(x => x).ToList();
print(wrap(c1).First());
print(wrap(c2).First());
print(wrap(c3).First());
Console.WriteLine("<done>"); Console.ReadKey();
void print<T>(IEnumerable<T> tt) => Console.Write(string.Join(", ", tt) + "\n");
}
}
控制台输出:
5 items: 0, 1, 2, 3, 4
5 items:
5 items: 0, 1, 2, 3, 4
<done>