曾经面试的时候遇到这样一道题,以下代码在运行时会出现什么问题:
Dictionary<string, int> dic = new Dictionary<string, int>();
dic["a"] = 1;
dic["b"] = 2;
foreach (string key in dic.Keys)
{
dic[key] = 100;
}
这个问题很好解释,foreach是迭代器,迭代过程中的变量是不可修改的,会产生不可预估的后果,所以编译器在编译时会报错。
解决办法就是将字典项保存到List中,利用for循环遍历遍历List时,对字典进行修改:
Dictionary<string, int> dic = new Dictionary<string, int>();
dic["a"] = 1;
dic["b"] = 2;
//将字典的keys保存到链表中
List<string> keys = new List<string>(dic.Keys);
//遍历链表
foreach (string key in keys)
{
dic[key] = 100;
}