日期:2014-05-18  浏览次数:20817 次

字典的遍历问题
//我有一个数据结构如下
  Dictionary<int,Dictionary<string,decimal>> tmpGetItemTime=new Dictionary<int,Dictionary<string,decimal>>()
  //如果加入了正确的数据后我进行以下的遍历,最后提示出错
  //出错提示是:集合已修改;可能无法执行枚举操作
  foreach (int p in tmpGetItemTime.Keys)
  {
  for (int i = 0; i < podetailDatas.GetLength(0); i++)
  {
  if (p == (int)podetailDatas[i, 2])
  {
  foreach (string ks in tmpGetItemTime[p].Keys)
  {
  tmpGetItemTime[p][ks] *= histCountInt[i];
  }
  }
  break;
  }
  }
  //请指教!谢谢!

------解决方案--------------------
问题呢?+
------解决方案--------------------
没有认真看你的代码,像是O(n^3)的操作。

但异常可以这样避免(作一个keys的拷贝):
C# code

foreach (int p in new List<int>(tmpGetItemTime.Keys))                         //<--
{
    for (int i = 0; i < podetailDatas.GetLength(0); i++)
    {
        if (p == (int)podetailDatas[i, 2])
        {
            foreach (string ks in new List<string>(tmpGetItemTime[p].Keys))   //<--
            {
                tmpGetItemTime[p][ks] *= histCountInt[i];
            }
        }
        break;
    }
}

------解决方案--------------------
哇 嵌套。。。

5555 我们这破书里面怎么没提过

嵌套使用