这个问题背负了我提出的另一个问题,即通过在迭代对象时修改对象来滥用 IEnumerable 接口。
普遍的共识是任何实现 IEnumerable 的东西都不应该是幂等的。但是 .net 支持使用 foreach 语句进行编译时鸭子类型。任何提供 IEnumerator GetEnumerator() 方法的对象都可以在 foreach 语句中使用。
那么GetEnumerator方法应该是幂等的还是实现IEnumerable的时候呢?
编辑(添加上下文)
为了说明这一点,我建议的是,在遍历队列时,每个项目都会随着它的进行而出队。此外,在调用 GetEnumerator 之后推入队列的任何新对象仍将被迭代。