R
Knuddlbaer schrieb:
@Rudi:
foreach und readonly:
Das ganze wird AFAIK dadurch erreicht, das IEnumerator::Current nur den getter Implementiert. Man könnte jetzt
einen Member aufrufen um einen Wert zu ändern.
Beispiel:
ref class myTest
{
public: int x;
public: void setx(int y){x = y;}
};
System::Collections::Generic::List<myTest^> ^ list = gcnew System::Collections::Generic::List<myTest ^>();
for(int i=0;i < 10;++i)
{
myTest ^t = gcnew myTest();
t->x = i;
list->Add(t);
}
for each(myTest^ i in list)
i->setx(99);
Beachten sollte man aber:
Ein Enumerator bleibt so lange gültig, bis die Auflistung geändert wird. Wenn an der Auflistung Änderungen vorgenommen werden, z. B. durch Hinzufügen, Ändern oder Entfernen von Elementen, ist der Enumerator unwiderruflich ungültig, und der nächste Aufruf von MoveNext oder Reset löst eine InvalidOperationException aus. Wenn die Auflistung zwischen MoveNext und Current geändert wird, gibt Current das Element zurück, auf das der Enumerator festgelegt wurde, auch wenn er bereits ungültig ist.
http://msdn2.microsoft.com/de-de/library/system.collections.ienumerator.current(VS.80).aspx
(Das gilt natürlich auch wenn man den indexer und for verwendet, hier sagt man explizit das man weiß was die Auflistung bei Änderungen von Werten macht.)
Vielen Dank für die super Erklärung und das Beispiel aber da ich noch ein Anfänger bin verstehe ich noch nicht so wirklich alles aber wenn etwas weiter bin werde ich mir das noch ganz genau angucken
Danke