遍历数据结构

在遍历数据结构的时候,是不可以修改原数据结构的。不然就会抛出错误。

我常用的解决办法是做一份拷贝,遍历这个拷贝。(如果数据不是很大的话)

比如,这个代码:

IDictionary<int, string> ht = new Dictionary<int, string>();
ht.Add(1, "one");
ht.Add(2, "two");

// Print "one,two"
Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray()));

foreach (int key in new List<int>(ht.Keys)) {
    if (key == 1) ht.Remove(key);
}

// Print "two"
Console.WriteLine(String.Join(",", ht.Values.Select(i => i.ToString()).ToArray()));
我在遍历的时候,做了一份拷贝。代码是 new List<int>(ht.Keys),用到了 List 的构造拷贝函数,会对 ht.Keys 做一份拷贝。之后的 foreach 其实是在对这个拷贝做遍历。
原文地址:https://www.cnblogs.com/lisengl/p/2554546.html