Laden...

Tiefe Kopie von IEnumerator Instanz

Erstellt von Muphin vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.178 Views
M
Muphin Themenstarter:in
174 Beiträge seit 2006
vor 17 Jahren
Tiefe Kopie von IEnumerator Instanz

Guten Tach!
Ich hab eine Funktion geschrieben der als Parameter ein IEnumerator übergeben werden muss. Ich musste jetzt nur leider feststellen dass beim Funktionsaufruf keine kopie von der IEnumerator instanz erstellt wird, so dass nachdem die Funktion durchgelaufen ist, in der Funktion aus der ich die andere Funktion aufgerufen habe nachher die IEnumerator instanz an der falschen stelle steht.
Habt ihr da einen Lösungsvorschlag für mich?

gruß Muphin

S
8.746 Beiträge seit 2005
vor 17 Jahren

Übergebe einfach jedesmal einen neuen Enumerator.

M
Muphin Themenstarter:in
174 Beiträge seit 2006
vor 17 Jahren

Ich wüsste jetzt nich wie ich das machen soll!
Dafür bräuchte ich ja eine Tiefe Kopie der IEnumerator instanz, ich konnte bisher aber keine möglichkeit finden so etwas zu erstellen!
So sieht der Funktionsaufruf aus:


IEnumerator Iterator = this.ChartDescription.Columns.GetEnumerator();

while( Iterator.MoveNext() )
{   
     currentColumn = (ChartColumn)Iterator.Current;
     ....
     calculateIntersection( e, Iterator, columnCurrentOffset, columnWidth );
     ....
}

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Muphin,

Enumeratoren kann man normalerweise nicht kopieren. Übergibt stattdessen die Collection, die enummeriert werden soll. Wenn das nicht geht, muss der Aufrufer dafür sorgen, dass jeweils ein neu erzeugter Enummerator übergeben wird.

Wenn das alles nicht geht, gibt es noch IEnumerator.Reset.

herbivore

M
Muphin Themenstarter:in
174 Beiträge seit 2006
vor 17 Jahren

Guten morgen!
Kann ich herausfinden an welche Stelle die IEnumerator Instanz zeigt? Es handelt sich dabei um eine Array List, falls das von bedeutung sein sollte!

mfg Muphin

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Muphin,

nur indirekt und auch nur dann, wenn jedes ArrayList-Element nur einmal in der ArrayList enthalten ist: al.IndexOf (enumerator.Current).

Aber du kannst dir für eine ArrayList auch einen eigenen Enummerator schreiben, der ICloneable implementiert. Siehe auch Hilfreiche Iteratoren / Improving Foreach und auch yield.

Allerdings finde ich es nach wie vor eher unüblich, Enummeratoren zu übergeben.

herbivore