2016-06-13 4 views
-2

Ich Iterieren über ein Wörterbuch Dictionary<double, int> diametersAndQuantities und das Wörterbuch geändert wird. Offensichtlich bekomme ich eine Ausnahme, dass die Sammlung geändert wurde. Wie kann ich das verhindern?Prevent Sammlung Ausnahme in einer foreach-Schleife in C# modifizierte

foreach (var diametersAndQuantity in diametersAndQuantities) 
{ 
    // some operations here 

    // update 
    diametersAndQuantities[db] = n; 
} 

Antwort

2

Sie können eine temporäre Liste der KeyValuePair s schaffen überlaufen und immer noch das Wörterbuch aktualisieren.

foreach (var diametersAndQuantity in diametersAndQuantities.ToList()) 
{ 
    // some operations here 

    // update 
    diametersAndQuantities[diametersAndQuantity.Key] = n; 
} 
+0

Die 'ToList()' funktioniert. Vielen Dank! – Vahid

-1

können Sie den ToList() verwenden, die Aufzählung zu bekommen, um
ähnlich wie akzeptierte Antwort bewertet werden - vielleicht ein wenig schnelle
sollte weniger Speicher

Dictionary<int, int> dic = new Dictionary<int, int>() { { 1, 2 }, { 2, 3 }, { 3, 2 } }; 
foreach (int value in dic.Values) 
    Debug.WriteLine(value); 
foreach (int key in dic.Keys.ToList()) 
    dic[key] = 12; 
foreach (int value in dic.Values) 
    Debug.WriteLine(value); 
Debug.WriteLine("done"); 
+1

@juharr 'Value' (und auch' Key') ist nur lesbar, also wird es nicht * kompilieren *. – Servy