2016-06-13 56 views
-2

我遍歷字典Dictionary<double, int> diametersAndQuantities並修改字典。很明顯,我收到了一個異常,該集合已被修改。我怎樣才能防止這種情況發生?防止在c中的foreach循環中收集修改的異常#

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

    // update 
    diametersAndQuantities[db] = n; 
} 

回答

2

您可以創建KeyValuePair的臨時列表來迭代並仍然更新字典。

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

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

的'ToList()'作品。謝謝! – Vahid

-1

可以使用ToList()來獲取枚舉進行評估
類似於接受的答案 - 也許有點快
應使用較少的內存

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'(也是'Key')是隻讀的,所以它不會編譯*。 – Servy