| 

.NET C# Java Javascript Exception

0
Hallo

System.InvalidOperationException: Collection was modified; enumeration operation may not execute..
Ich würde gerne direkt Werte/Values eines Dictionarys ändern, gibts hierfür einen Trick oder muss man dies umständlich programmieren?

foreach(var book in mCart)
{
if(book.Value > 0)
mCart[book.Key]--;
}

Danke!
26.11.2009
wolfi 13 1 3
2 Antworten
1
Es gibt für das Ändern der Werte eines Dictionary keinen Trick oder sonst einen Hack.
Die Dokumentation sagt hierzu eindeutig:
Die foreach-Anweisung fungiert als Wrapper für den Enumerator, der nur das Lesen aus der Auflistung, nicht jedoch das Schreiben in diese zulässt.


Servus,
Klaus
26.11.2009
klaus_b 1,6k 3 7
Danke Klaus, ich mach dann einfach eine Liste in der ich die Keys speichere, und dann die Liste iteriere, oder?
wolfi 26.11.2009
Da du die Werte bearbeiten willst, erstelle eine Struktur mit einem Book-Objekt, scheint ein string zu sein, und einem Integer so wie in deinem Dictionary. Dann verwende eine List<T> mit der Struktur anstatt eines Dictionary<string, int>.
klaus_b 26.11.2009
1
Alternativ dazu kann man auch eine LinkedList über die Keys zum iterieren legen...

Dictionary<string, int> test = new Dictionary<string, int>();
test.Add("eins", 0);
test.Add("zwei", 3);
test.Add("drei", 5);

foreach (string tmp in new LinkedList<string>(test.Keys))
{
if (test[tmp] > 0)
{
test[tmp]--;
}
}

foreach (KeyValuePair<string, int> t in test)
{
Console.WriteLine(t.Key+" "+t.Value);
}
Console.ReadKey();


Grüßle
27.11.2009
Scout 1,4k 2 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH