Mam klasy o nazwie GenericPermutations, która jest zarówno przeliczalne i moduł wyliczający. Jego zadaniem jest pobranie uporządkowanej listy obiektów i iteracja po każdej ich permutacji w kolejności.Klasa C# to IEnumerable I IEnumerator w tym samym czasie. Jakie są tego problemy?
przykład implementacja całkowitą tej klasy mógłby iterację następujące:
GenericPermutations<int> p = new GenericPermutations<int>({ 1, 2, 3 });
p.nextPermutation(); // 123
p.nextPermutation(); // 132
p.nextPermutation(); // 213
// etc.
więc jego enumerable w tym sensie, że zawiera „listę” rzeczy można wyliczyć drugą. Jest to także moduł wyliczający, ponieważ jego zadaniem jest znalezienie kolejnej permutacji.
problem: Jestem obecnie próbuje zintegrować IEnumerator i IEnumerable z tej klasy, i wydaje mi się, że powinna być zarówno (zamiast przy użyciu klasy sub jako IEnumerable). Do tej pory uniknąłem problemu, próbując pobrać z niego dwa moduły wyliczające, przekazując nowy obiekt GenericPermutation w metodzie GetEnumerator
.
Czy to zły pomysł? Coś jeszcze powinienem wziąć pod uwagę?
Jeśli twoja wyliczalna instancja jest również jedną instancją dla wszystkich wyliczanych z niej enumeratorów, jak zamierzasz zachować stan między nimi? –
Mój pomysł polegał na tym, że za każdym razem, gdy żądano modułu wyliczającego, utworzę nową kopię mojego obiektu i przekazuję tę kopię jako moduł wyliczający. Jeśli więc zostanie zamówiony nowy moduł wyliczający, zostanie przesłana kopia bieżącego modułu wyliczającego w jego pierwotnym stanie. – jtfairbank