這個問題背誦了另一個question,我提到了通過在遍歷它時通過修改對象來濫用IEnumerable接口。當類沒有實現IEnumerable時,GetEnumerator方法仍然是冪等的
普遍的共識是沒有任何實現IEnumerable的東西應該是冪等的。但.net支持編譯時使用foreach語句進行鴨子打字。任何提供IEnumerator GetEnumerator()方法的對象都可以在foreach語句中使用。
那麼,GetEnumerator方法應該是冪等的還是它實現IEnumerable的時候呢?
EDIT(由上下文)
把一些情況下這一輪我的建議是,遍歷隊列時,因爲它不用每個項目出列。此外,在調用GetEnumerator之後,任何推入隊列的新對象都將被迭代。
我不會將GetEnumerator添加到Queue本身,而是定義一個函數'IEnumerable DequeueOnEnumeration()',它可以像'foreach(T中的元素,在queue.DequeueOnEnumeration())'中一樣使用。這樣的語義*更清晰。 –
CodesInChaos
2010-11-27 19:12:44