这个问题是另一个问题的基础question https://stackoverflow.com/questions/4189581/should-an-ienumerable-iterator-on-a-queue-dequeue-an-item我提出了关于通过在迭代对象时修改对象来滥用 IEnumerable 接口的问题。
普遍的共识是,任何实现 IEnumerable 的东西都不应该是幂等的。但 .net 支持使用 foreach 语句进行编译时鸭子类型。任何提供 IEnumerator GetEnumerator() 方法的对象都可以在 foreach 语句内使用。
那么 GetEnumerator 方法应该是幂等的还是当它实现 IEnumerable 时就应该是幂等的?
编辑(添加上下文)
为了围绕这个问题提供一些上下文,我建议的是,当迭代队列时,每个项目都会立即出队。此外,在调用 GetEnumerator 后推送到队列中的任何新对象仍将被迭代。
这不是type这是幂等的——这甚至没有多大意义;你may意思是不可变的,但这还不清楚。这是GetEnumerator
方法本身通常是幂等的。
虽然我会说那是通常在这种情况下,我可以设想特殊情况,在这种情况下,使用非幂等是有意义的GetEnumerator
方法。例如,您可能拥有只能读取一次的数据(因为它是从网络服务器流式传输的,而网络服务器不会再次服务相同的请求,或类似的情况)。在这种情况下,GetEnumerator
必须有效地使数据源无效,以便将来的调用会抛出异常。
当然,这些类型和方法应该非常仔细地记录下来,但我认为它们是合理的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)