私はEnumerableとEnumeratorの両方であるGenericPermutationsというクラスを持っています。その仕事は、順序付けられたオブジェクトのリストを取得し、順番に各順列を反復することです。C#クラスはIEnumerableであり、同時にIEnumeratorです。これに関する問題は何ですか?
例、このクラスの整数implemenationは、以下を反復処理できます。
GenericPermutations<int> p = new GenericPermutations<int>({ 1, 2, 3 });
p.nextPermutation(); // 123
p.nextPermutation(); // 132
p.nextPermutation(); // 213
// etc.
それはあなたがオーバー列挙することができ、物事の「リスト」を含んでいるという意味で、だから、その列挙。これは、列挙子でもあります。その仕事は、次の順列を見つけることにあります。
問題:私は現在、このクラスにIEnumeratorとIEnumerableを統合しようとしています。私は、(IEnumerableとしてサブクラスを使用するのではなく)両方でなければならないようです。ここまでは、GetEnumerator
メソッドで新しいGenericPermutationオブジェクトを渡すことで、2つの列挙子を取得しようとする問題を回避しました。
これは悪い考えですか?他に何か考慮する必要がありますか?
enumerableインスタンスが、それから要求されたすべての列挙子の1つのインスタンスでもある場合、どうやってそれらの間に状態を維持しますか? –
私の考えは、列挙子が要求されるたびにオブジェクトの新しいコピーを作成し、そのコピーを列挙子として渡すことでした。したがって、新しい列挙子が要求された場合、元の状態の現在の列挙子のコピーが渡されます。 – jtfairbank