在c#中的foreach循环中防止集合修改的异常

时间:2016-06-13 18:14:06

标签: c# dictionary collections foreach

我在字典queryset2 = [] try: qs = A.objects.all().values('location_id') queryset2 = B.objects.filter(id__in=qs) print queryset2 self.fields['location'].queryset = queryset2 上进行迭代,并修改字典。显然,我得到了一个例外,即该集合已被修改。我怎样才能防止这种情况发生?

Dictionary<double, int> diametersAndQuantities

2 个答案:

答案 0 :(得分:2)

您可以创建KeyValuePair的临时列表来迭代并仍然更新字典。

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

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

答案 1 :(得分:-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");