System.Dictionary: Value beschreiben..
-
Hallo zusammen,
ich habe gerade ein Problem mit der Klasse System.Dictionary;
In meiner Klasse legen ich einen Prototyp an, den ich im Constructor entsprechend instanziire.class MyClass { public: MyClass() { Settings = gcnew Dictionary<String^, String^>; } private: Dictionary<String^, String^> ^Settings; }
In einer separaten Methode befülle ich das Objekt mit Defaulteinträgen.
void befülle(void) { Settings->Add("a",""); Settings->Add("b",""); ... }
Jetzt kommt es zum Problem. Ich möchte nun die Value-Einträge mit entsprechenden Werten nachträglich füllen.
Diese Werte lese ich momentan aus einer INI-Datei aus. Hier mal der Code:
StringBuilder^ sb = gcnew StringBuilder(); for each(KeyValuePair<String^, String^> element in Settings){ if(GetPrivateProfileString("Global", element.Key, "", sb, (unsigned int)sb->Capacity, sINIFile) > 0){ Settings[element.Key] = sb->ToString(); //Set value } }
Wenn ich diesen Code ausführe, so wird mit folgender Fehler angezeigt.
Message = "Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden."
Kann mir einer sagen, woran das liegt? Wie kann ich nachträglich dem element.value einen wert zuordnen? geht das? Am liebsten wäre mir es, wenn die GetPrivateProfileString-funktion den Wert gleich in die Value variable reinschreiben würde als mit dem Umweg über den StringBuilder!
Vielen dank für eure Hilfe
Gruß
-
Du kannst nicht über eine Collection (hier Settings) iterieren (mit for each) und sie währendessen verändern (z.B. einen Wert eintragen oder entfernen).
Eine Lösung dazu ist, die Änderungen zuerst in einer anderen Collection zwischen zu speichern und nach dem iterieren diese Änderungen nachzutragen.
Simon
-
OK danke schon mal... werde es ausprobieren!