这个问题背上了另一个我提出的关于在迭代对象时通过修改对象来滥用IEnumerable接口的问题。
普遍的共识是,任何实现IEnumerable的东西都不应该是幂等的。但是.net支持使用foreach语句的编译时duck类型。任何提供IEnumerator GetEnumerator()方法的对象都可以在foreach语句中使用。
那么,GetEnumerator方法应该是幂等的吗?还是当它实现IEnumerable时是幂等?
EDIT(添加上下文)
为了解决这个问题,我的建议是,当在队列上迭代时,每个项目都会在前进的过程中退出队列。此外,在调用GetEnumerator之后推送到队列中的任何新对象仍将被迭代。