集合已修改;可能无法执行枚举操作。
遍历到第二层就出这问题了。
private static void CreateTree(TreeNodeCollection Nds, int parentID, TList <HROrganization> list)
{
TreeNode tmpNd;
list.RemoveFilter();
list.Filter = "ParentID = " + parentID.ToString();
foreach (HROrganization hro in list)
{
tmpNd = new TreeNode();
tmpNd.Name = hro.Depart_ID.ToString();
tmpNd.Text = hro.Depart_Name.ToString();
tmpNd.Tag = hro;
Nds.Add(tmpNd);
CreateTree(Nds[Nds.Count - 1].Nodes, Convert.ToInt32(hro.Depart_ID.ToString()), list);
}
}
------解决方案--------------------在对list进行循环的时候又对list进行了修改,这是不应该的。
换个思路来处理这个问题。
比如先把这个列表的内容复制一份,对这一份列表循环,然后对List进行修改。
------解决方案--------------------使用foreach时 不能改变集合的数据
举例来简单的说就是让你数一个药瓶子里到底有多少药片?
可是你一边数 一边有人又在往里添 那么永远都数不清楚
------解决方案--------------------for(int i = 0;i < list.count;i++)
{
foreach (HROrganization hro in list)
{
tmpNd = new TreeNode();
tmpNd.Name = hro.Depart_ID.ToString();
tmpNd.Text = hro.Depart_Name.ToString();
tmpNd.Tag = hro;
Nds.Add(tmpNd);
CreateTree(Nds[Nds.Count - 1].Nodes, Convert.ToInt32(hro.Depart_ID.ToString()), list);
list.romove(hro);
break;
}
}
------解决方案--------------------判断下list.count=0
------解决方案--------------------LZ TList 这个东东有点像 DataView
foreach 内部使用枚举器迭代,而这个迭代器在一开始的时候就返回了,它的迭代次数已经确定了,
但是,你后面又更新了集合,导致之前的迭代次数不一致了
当使用 foreach 的时候,集合只能处于只读状态,否则产生不可以预期的效果