假设您有一个返回惰性枚举对象的函数:
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
多次打电话..