读书人

集合已修改;可能无法执行枚举操作。该

发布时间: 2012-01-26 19:40:46 作者: rapoo

集合已修改;可能无法执行枚举操作。
遍历到第二层就出这问题了。
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 的时候,集合只能处于只读状态,否则产生不可以预期的效果

读书人网 >C#

热点推荐