假设您有一个返回惰性枚举对象的函数:
struct AnimalCount
{
int Chickens;
int Goats;
}
IEnumerable<AnimalCount> FarmsInEachPen()
{
....
yield new AnimalCount(x, y);
....
}
您还有两个函数使用两个单独IEnumerable的 s,例如:
ConsumeChicken(IEnumerable<int>);
ConsumeGoat(IEnumerable<int>);
你怎么能调用ConsumeChicken并且ConsumeGoat没有 a) 预先转换FarmsInEachPen()ToList() 因为它可能有两个数不胜数的记录,b) 没有多线程。
基本上:
ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens));
ConsumeGoats(FarmsInEachPen().Select(x => x.Goats));
但不强制双重枚举。
我可以用多线程解决它,但是对于每个列表都有一个缓冲区队列,它会变得不必要地复杂。
所以我正在寻找一种方法将AnimalCount枚举器拆分为两个int枚举器而无需完全评估AnimalCount. ConsumeGoat跑步和ConsumeChicken步调一致没有问题。
我能感觉到解决方案超出了我的掌握,但我并不完全在那里。我正在考虑返回一个IEnumerable被馈入的辅助函数,ConsumeChicken每次使用迭代器时,它都会在内部调用ConsumeGoat,从而以锁步执行这两个函数。除了,当然,我不想ConsumeGoat多次打电话..