この質問は、オブジェクトを反復処理するときにオブジェクトを変更して IEnumerable インターフェイスを悪用することに関して私が提起した別の質問に便乗しています。
一般的なコンセンサスは、IEnumerable を実装するものはべき等であってはならないということです。しかし、.net は foreach ステートメントを使用したコンパイル時のダック タイピングをサポートしています。IEnumerator GetEnumerator() メソッドを提供するすべてのオブジェクトは、foreach ステートメント内で使用できます。
GetEnumerator メソッドはべき等であるべきですか、それとも IEnumerable を実装するときですか?
編集 (追加されたコンテキスト)
私が提案しているのは、キューを反復処理するときに、各アイテムがキューから取り出されるということです。さらに、GetEnumerator の呼び出し後にキューにプッシュされた新しいオブジェクトは、引き続き反復処理されます。