Tag: enumerator

在C#中动态解压缩IEnumerable或最佳替代方案

让我们假设您有一个函数返回一个延迟枚举的对象: struct AnimalCount { int Chickens; int Goats; } IEnumerable FarmsInEachPen() { …. yield new AnimalCount(x, y); …. } 您还有两个使用两个独立IEnumerable的函数,例如: ConsumeChicken(IEnumerable); ConsumeGoat(IEnumerable); 如何在没有a)事先转换FarmsInEachPen() ToList()的情况下调用ConsumeChicken和ConsumeGoat ,因为它可能有两个zillion记录,b)没有multithreading。 基本上: ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens)); ConsumeGoats(FarmsInEachPen().Select(x => x.Goats)); 但是没有强制双重枚举。 我可以使用multithreading来解决它,但是每个列表的缓冲队列都会变得不必要地复杂化。 所以我正在寻找一种方法将AnimalCount枚举器分成两个int枚举器而不完全评估AnimalCount 。 在锁步中一起运行ConsumeGoat和ConsumeChicken没有问题。 我能够完全理解解决方案,但我并不在那里。 我正在考虑一个辅助函数,它返回一个IEnumerable被输入到ConsumeChicken ,每次使用迭代器时,它在内部调用ConsumeGoat ,从而在锁步中执行这两个函数。 当然,除了我不想多次打电话给ConsumeGoat ..